2010-02-04 48 views
4

我已經閱讀了關於明確地使垃圾收集的對象,在很多方面。所以我想知道一些明確垃圾收集的方法使對象明確垃圾回收的方法

+0

語言和實現你指的是什麼?這裏有很多的GC語言,每個實現都可以自由添加自己的非標準功能。 – 2010-02-04 19:42:30

+0

對不起。但是我只選擇了一個標籤java。它意味着它與Java語言相關 – GuruKulki 2010-02-05 18:34:57

回答

1

System.gc是告訴JVM明確執行垃圾回收器。

但對於一些方法我知道,使顯式垃圾回收的對象是:

分配其引用,以指向空 EX:動物A =新的動物(); a = null

將其引用指定爲指向另一個對象。 EX:動物a1 =新動物(); a1 = new Animal();

+2

將對象的所有引用賦值爲'null',僅使對象準備好被垃圾收集。它不會立即將垃圾收集起來,而且之後可以長時間保存在內存中。調用'System.gc()'也不能保證所有未被引用的對象都被收集。閱讀其他答案。 – MAK 2010-02-04 19:50:50

6

沒有辦法顯式垃圾收集。

可以「禮貌地詢問」虛擬機做垃圾收集致電:

System.gc(); 

,但它不能保證它會的。

調用gc方法建議Java虛擬機花費大量的工作來回收未使用的對象,以便使其當前佔用的內存可供快速重用。當控制從方法調用返回時,Java虛擬機已盡最大努力從所有被丟棄的對象中回收空間。

和「盡力而爲」可能是推遲垃圾收集。

對於如何創建一個對象符合使用垃圾收集閱讀Effective Java, Chapter 2

+2

我喜歡「盡力而爲」一詞。這意味着「也許,如果我喜歡它」。 – 2010-02-04 19:48:34

2

您可以通過所有引用設置爲它null明確地使垃圾收集對象資格。

這不會調用垃圾收集器本身,但是當收集開始時,它將收集此對象。

你最好讓Java垃圾收集器自動完成它。它已經被優化到能比任何你想要做的更好,更高效的地步。

1

除非你自己寫一個像VisualVM這樣的工具,否則你不應該擔心強制GC。

NetBeans,IntelliJ,VisualVM和很多其他人都可以使用GC,而不是提示,但是確實有效。使用JVMTI你可以強制GC。

但是再一次你可能做不是想要做到這一點。

強制使用JVMTI的ForceGarbageCollection的GC(而不是提示)。

這就是說,你可能真的不要想要做到這一點(它真的是重複)。

上,如果你真的想知道(但你可能不)如何給力,一個事實,一個GC主題權威信息:

http://java.sun.com/javase/6/docs/platform/jvmti/jvmti.html#ForceGarbageCollection