回覆列表
-
1 # 網路圈
-
2 # 二狗子liu
不會的騷年,設定為null只是吧物件的引用置空了,物件本身還在記憶體裡呢,等gc過後才會回收記憶體。而gc是由jvm自動控制的,雖然java也提供了手動呼叫gc的方法,但是不保證立即執行。
-
3 # 求真求理曲修明
沒有說把物件設定成null的吧,你那是把一個變數指向null,那這個變數原來指向的物件就少了一個引用,如果還有其他變數對這個物件進行引用,那這個物件就不會被回收。基本上,你把一個變數設定成null,不會影響到物件的回收,垃圾回收機制還是要按照自己的那一套規則去檢測這個物件的引用情況。
首先科普一下,Java物件是引用變型的,它會用兩種記憶體區:堆記憶體、棧記憶體。Java物件是儲存在堆記憶體中的,而對此物件的引用(理解為變數)儲存在棧記憶體中。
比如:String str=new String("字串"); 這行程式碼用的是兩塊記憶體,new String("字串") 存在堆記憶體中,str 變數儲存在棧記憶體中。
當我們設定物件為 null 後(即:str=null),此時str變數與堆記憶體中的資料就斷開聯絡了,GC演算法會在必要時回收 str 及堆記憶體中的物件,但這個GC任何回收我們是無法干預的。
總結說就是:Java物件在使用後設置為null,在GC對此物件回收後,記憶體會相應減少,但不是說將一個物件引用設定為null後記憶體就立馬釋放了。GC會在合適的時間來回收垃圾資料。