(弱引用)
[1]強引用
如果有強引用存在,gc是不會**物件的。
[2]弱引用
弱引用可以讓您保持對物件的引用,
同時允許gc在必要時釋放物件,**記憶體。
[3]弱引用使用場景
對於那些建立便宜但耗費大量記憶體的物件,
希望保持該物件,又要在應用程式需要時使用,
同時希望gc必要時**時,可以考慮使用弱引用。
單引數版
雙引數復活版
需要finalize的物件在最終釋放前會有一次復活,第二個引數的作用。
[1]短引用
第二個引數給false,這個弱引用就是乙個short weak reference(短弱引用),
當gc**時,發現根中沒有這個物件的引用了,就認為這個物件無用,
這時短弱引用對這個物件的跟蹤到此為止,弱引用的 target被設定為null。
[2]長引用
如果第二個引數給true,這個弱引用就是乙個long weak reference(長弱引用)。
在物件的finalize方法沒有被執行以前,target都可用。
不過這是物件的某些成員變數也許已經被**,所以使用起來要想當小心。
[3]finalize物件「復活」
short weak reference會忽略,即wr.target會置null,
而long weak reference則會跟蹤,wr.target仍然refer to 原物件,這個是兩者的最大區別。
如果沒有finalize,則兩種weak reference表現完全相同。
原理:
gc維護了兩個列表來跟蹤兩種弱引用的目標物件,
在乙個 weakreference物件建立時,
它在相應的列表中找到乙個位置,
將目標物件的引用放入,
很顯然,這兩個列表不是根的一部分。
在gc進行記憶體**的時候,如果要**某乙個物件,
會檢查弱引用的列表,如果儲存著這個物件的引用,
則將其設為null。
關於C語言中的強符號 弱符號 強引用和弱引用
首先我表示很悲劇,在看 程式設計師的自我修養 鏈結 裝載與庫 之前我竟不知道c有強符號 弱符號 強引用和弱引用。在看到3.5.5節弱符號和強符號時,我感覺有些困惑,所以寫下此篇,希望能和同樣感覺的朋友交流也希望高人指點。首先我們看一下書中關於它們的定義。引入場景 1 檔案a中定義並初始化變數i in...
強引用,軟引用,弱引用
強引用 強引用設定為空,物件立馬會被 public class normalreference classm 軟引用 軟引用當引用存在的時候,只有當記憶體不足的時候才去 public class t0 softreference catch exception e system.out.printl...
lua的弱弱引用表
lua有gc。細節無需太關注,知道些主要的即可。能local就一定不要global 還有在陣列裡的物件,除非顯式 nil,否則非常難 只是能夠用弱引用表來告訴gc。外部引用為0,就不要管我,請del it。weak table是通過元表實現,元表裡的 mode欄位包括k或者v k表示key為弱引用 ...