2010-02-04 46 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