2014-09-29 97 views
1

我想了解垃圾回收器方法Java垃圾收集器方法

;

我相信這是假的,因爲程序會自動執行此操作「在Java中,你的程序必須調用垃圾收集方法 頻繁,否則你的程序將與垃圾 對象超限」 ,在後臺運行正確嗎?

+0

你引用了什麼來源? – 2014-12-17 21:14:47

回答

4

正確。實際上,沒有垃圾回收器方法(System.gc()是一個提示,現在可能是垃圾回收的好時機,但沒有其他)。如果JVM實現垃圾收集(以及所有的Java SE和Java EE),它將根據自己的規則進行收集,這些規則通常包括同時清理短暫對象,並在內存開始變慢時進行主要收集,或者支離破碎。

0

雖然在一般情況下調用System.gc()被認爲是壞的,壞的,壞的,非常糟糕的做法,在某些情況下,這可能會防止內存不足錯誤。這主要是當你快速連續分配大量對象並且有時間的時候,其中許多對象不再被引用並且可以被刪除。雖然System.gc()只是一個提示,但有時系統可能需要此提示。或者,你可能會重新考慮你的算法。

然而,對於較新的Java版本,這些情況越來越少;過去常常比較頻繁。官方的觀點是從來沒有手動調用垃圾收集器。

+0

調用'System.gc()'是*可以接受*的另一種情況是,當您嘗試進行微基準測試*並且不希望GC在中間啓動時(測量時) – TheLostMind 2014-09-29 05:36:20

0

System.gc()方法不一定會調用垃圾收集器。垃圾收集取決於JVM的實現。例如,當你做一個Windows JVM可能沒有的System.gc()時,Linux JVM實際上可能會調用GC。

假設你有太多無法訪問內存中的對象,但是你仍然有足夠的堆空間,所以JVM可能決定不運行GC線程。所以結論「沒有保證GC線程在你調用System.gc()時運行,並且不需要調用它。」

這是Java的主要優勢之一,開發人員不必擔心內存管理和內容。不像C++,你必須做類似

free(obj);