推 chchwy:Effective Java says: nerver rely on finalizer. 06/13 14:41
→ LaPass:那可以依賴Reference嗎? XD 06/13 16:05
→ dou0228:與其相信GC/finalizer/Reference, 不如直接 call close 06/13 17:37
PhantomReference
SoftReference
WeakReference
之後試出來的結果,上面這幾個都沒辦法這樣用
這幾個在綁定的物件的finalize被呼叫過後
才會被放到ReferenceQueue中
等於是說..... 這只用在物件被註銷後,打算來做些什麼事才會用到
我能想到的用途也只有.....
記憶體快取之類的功能而已
另外,試著讓程式不呼叫System.gc(); 讓他跑
結果程式跟mysql的連線就掛在那邊,一個多小時都沒斷掉 (都沒進行過gc)
相對應的Reference物件當然也沒進到ReferenceQueue中
如果設定個迴圈讓系統去gc
大概第一、二次呼叫gc的時候就會自己把連線切斷了
另外SoftReference、WeakReference、PhantomReference在遇到GC時的差異是
WeakReference跟PhantomReference第一次GC時就會被清除
SoftReference第二次才會被清除
※ 編輯: LaPass 來自: 125.233.152.211 (06/14 08:14)
→ dou0228:System.gc 不保證一定會執行,所以量大你依賴它 = 找死 06/14 08:30
→ bitlife:再講一次,不應在finalize才釋放自OS/其它AP取得應還的資源 06/14 08:58
→ gwokae:樓上 & 樓樓上 +1 06/14 09:15
→ LaPass:現有的Connection pool都是設定時間,超時就拿回去,這可能 06/14 10:30
→ LaPass:是目前最好的解決法了。 06/14 10:36
→ qrtt1:並沒有超時就會拿回去,要視你的 configuration 而定。 06/14 10:43
→ qrtt1:並且 connection pool 大多再包一層 proxy,會偵測發出去的 06/14 10:44
→ qrtt1:connection 有沒有動作,要 idle 到那個時間有困難。。 06/14 10:45