我已经读过很多关于使对象明确地被垃圾收集的内容。所以我想知道一些明确垃圾收集的方法
答案 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