使对象明确地被垃圾收集的方法

时间:2010-02-04 19:12:48

标签: java

我已经读过很多关于使对象明确地被垃圾收集的内容。所以我想知道一些明确垃圾收集的方法

4 个答案:

答案 0 :(得分:6)

无法显式垃圾收集。

您可以通过调用以下方式“礼貌地要求”虚拟机进行垃圾回收:

System.gc();

但不保证会这样。

  

调用gc方法表明Java虚拟机花费了大量精力来回收未使用的对象,以使其当前占用的内存可用于快速重用。当控制从方法调用返回时,Java虚拟机已尽最大努力从所有丢弃的对象中回收空间。

和“尽力而为”可能是推迟垃圾收集。

有关如何使对象符合垃圾回收的资格,请阅读Effective Java, Chapter 2

答案 1 :(得分:2)

通过将对它的所有引用设置为null,您可以显式地使对象符合垃圾回收的条件。

这不会调用垃圾收集器本身,但是当集合启动时,它将收集此对象。

最好让Java垃圾收集器自动完成所有操作。它已经过优化,可以比你想做的任何东西更好,更有效。

答案 2 :(得分:1)

System.gc是告诉JVM明确执行垃圾收集器。

但至于我知道使一个对象显式垃圾收集的一些方法是:

将其引用指定为null EX:动物a =新动物();      a = null

指定其引用指向另一个对象。 EX:动物a1 =新动物();      a1 = new Animal();

答案 3 :(得分: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