国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

垃圾回收 - java 如何手動回收對象

瀏覽:118日期:2023-12-04 16:56:47

問題描述

先上代碼吧,我的目的是讓data這個數據徹底消失

public class Test { public static void main(String[] args) {Data data = new Data();data.num = 10;Data new1 = data;Data new2 = data;new2 = null;data = null;System.out.println(new1.num); }}class Data { int num;}

我知道java的垃圾回收機制,只有有東西還在引用他,他就不會消失,像上面的代碼依然能夠正常輸出10. 但是我想知道該怎么做,能讓System.out.println(new1.num);拋出null異常,即徹底沒有這個數據 不要說讓new1=null就行

問題解答

回答1:

你自己都說了'我知道java的垃圾回收機制,只有有東西還在引用他,他就不會消失', 'new1'這個變量還在引用 'new Data()'在堆里那塊內存,怎么可能會讓他被回收,這樣我們寫的代碼不全是空指針異常。你可以使用WeakReference,而不是強引用。

WeakReference<Data> new1 = new WeakReference(data); Data new2 = data; new2 = null; data = null; System.gc();//告訴垃圾收集器打算進行垃圾收集,而垃圾收集器進不進行收集是不確定的 ,所以下面延遲2秒 try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(new1.get().num);回答2:

System.gc();

建議JVM執行gc,有可能完全被拒絕。 GC本身是會周期性的自動運行的,由JVM決定運行的時機,而且現在的版本有多種更智能的模式可以選擇,還會根據運行的機器自動去做選擇,就算真的有性能上的需求,也應該去對GC的運行機制進行微調,而不是通過使用這個命令來實現性能的優化。

回答3:

有對象引用即將刪除的對象仍然可以置為null

{OutClass outClass1 = new OutClass();OutClass outClass2 = new OutClass();outClass2.outClass = outClass1;outClass1 = null;System.out.print(outClass1); }class OutClass {public OutClass outClass; }回答4:

在你沒有理解JMM原理之前,千萬不要亂用System.gc(),對象用完obj=null;就可以了。

回答5:

答案是不能,這屬于JVM規范中未定義的行為,開發者不應該試圖手動的去幫助虛擬機回收一個對象。如果是sun的JDK,好像有一個unsafe的包,不過我沒用過,不知道有沒有這樣的API。

標簽: java
相關文章:
主站蜘蛛池模板: 亚洲成a人片在线观看 欧美 | 亚洲第一男人天堂 | 中文字幕亚洲综合久久男男 | 狠狠色丁香婷婷综合 | 国产美女操 | 久久久久久青草大香综合精品 | 国产成人免费片在线观看 | 亚洲欧美网址 | 看久久久久毛片婷婷色 | 国产免费v片在线看 | 久久久精品久久久久久久久久久 | 三级黄色a | 亚洲精品综合一区在线 | 欧美xx在线观看 | 一色屋成人免费精品网 | 一级做a爱 | 国产 magnet | 国产国语对白一级毛片 | 欧美日韩精品一区二区三区不卡 | 国产成人在线视频播放 | 毛片免费视频网站 | 国产大片在线看 | 美女双腿打开让男人桶爽网站 | 中国一级特黄视频 | 欧美一级视频免费观看 | 在线免费观看亚洲视频 | 九九精品国产兔费观看久久 | 国产精品视频第一区二区三区 | 99久久99热精品免费观看国产 | 欧美成人精品 | 午夜桃色剧场 | 欧美性色生活片天天看99 | 一区免费在线观看 | 欧美成人亚洲欧美成人 | 国产精品久久久久无毒 | 国产乱码精品一区二区三区卡 | 久久久一区二区三区不卡 | 亚洲狠狠狠一区二区三区 | 欧美另类视频在线 | 九九精品免费 | 美国免费高清一级毛片 |