我的代碼是:System.gc()的垃圾收集
class Test{
Test c=new Text();
System.out.println(c.size());
System.gc();
}
程序員可以在Java垃圾收集使用System.gc()
?它是可取的嗎? JVM自動執行,那麼爲什麼程序員要調用System.gc()
?
我的代碼是:System.gc()的垃圾收集
class Test{
Test c=new Text();
System.out.println(c.size());
System.gc();
}
程序員可以在Java垃圾收集使用System.gc()
?它是可取的嗎? JVM自動執行,那麼爲什麼程序員要調用System.gc()
?
即使你使用System.gc()
也不能保證內存將調用gc方法暗示被釋放
從oracle網站 Java虛擬機了一些努力,以使內存回收未使用的對象他們目前佔用可用於快速重用。當控制從方法調用返回時,Java虛擬機已盡最大努力從所有被丟棄的對象中回收空間。
那麼我們如何才能釋放內存呢? – Pinky
@Pinky你可以像String一樣將它引用爲null x = null – SpringLearner
@javaBeginner壞主意。你應該設計得更好,所以你不必將引用設置爲null。 –
你可以稱之爲它。這不會有什麼壞處。但是沒有人會記住你所期望的對象的記憶立即獲得或沒有。
JVM通過異步運行GC,我們不需要驅動它。 JVM
智能足以釋放記憶。
只是爲了知道目的,它是好的,如果你真的想清除內存,由於XYZ
原因,肯定是在你的程序結構的設計缺陷。
System.gc()
向GC發送請求以執行收集週期。這個請求可能會被服務,或者可能被忽略,因此這兩個結果都不應該被依賴。
垃圾回收週期將發生自動(無需您進行任何操作)的時候,通常負責新對象的分配產生已滿或分配請求不能被滿足的。
在大多數情況下,您根本不需要在代碼中調用System.gc()
。 System.gc()
應該在幾種情況下使用,其中的條件類似於以下情況:
感謝您的理由。它的有用 – Pinky
@Pinky我希望你也能從中得到,幾乎所有情況下你都不應該這樣稱呼它,除非你真的知道你在做什麼。 –
請參閱http://stackoverflow.com/questions/2414105/why-is-it-a-bad-practice-to-call-system-gc – Mureinik
基本上唯一的原因就是爲了簡化一點調試模糊的內存泄漏,它*仍然*不能保證完整的GC時間,所以它不能被依賴。 – kiheru