Java垃圾收集到哈希表

时间:2012-09-13 14:57:47

标签: java object garbage-collection

java是否将垃圾签名的东西收集为对象?

如果是,我可以告诉java以编程方式将它们引导到我的一个哈希表(接受对象吗?)?

我很好奇这个功能。我知道System.gc()是命令,但我怎样才能实现第一个问题?我可以吗?

 myTrashBin=System.gc().getObjectList(); //???

如果没有,可能有一种方法可以通过自定义类创建此功能。

最后一个问题:我们如何覆盖System.gc()?

感谢。

4 个答案:

答案 0 :(得分:5)

这不在你的控制之下。如果您的对象无法访问,那么GC将收集这些对象。 System.gc()只不过是一个暗示,不能依赖。

finalize()可能会引起关注,但请阅读this question的答案以了解限制等。PhantomReferences也可能会引起关注。

答案 1 :(得分:1)

我认为如果你实现Finalize方法并在那里编写代码,你可以实现类似的东西:可能将对象添加到自定义列表

当垃圾收集确定没有对该对象的更多引用时,由对象上的垃圾收集器调用

http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html#finalize%28%29

答案 2 :(得分:1)

System.gc()发出了对垃圾收集器的调用,但这就是它的全部内容。 可能提升优先级,可能更快收集您的商品,但无法保证,正如文档所说:

  

调用gc方法表明Java虚拟机花费了大量精力   回收未使用的物体,以使   他们目前占用的内存可用于快速重用。控制时   从方法调用返回,Java虚拟机做得最好   努力从所有废弃物体中回收空间。

您最好采用其他方法,例如finalize()方法或管理对象中的引用计数器,这样当它达到零时,您就知道它可以被收集。检查this link

答案 3 :(得分:1)

Java使用托管内存。这意味着JVM管理它,因为你不想;)

  

我可以告诉java以编程方式将它们引导到我的一个哈希表(接受对象吗?)?

如果通过WeakReference引用它们,您可以通过编程方式获取所有要清理的对象。

  

我们如何覆盖System.gc()?

你做不到。事实上它只是一个提示,因为它无法保证做任何事情。