java是否将垃圾签名的东西收集为对象?
如果是,我可以告诉java以编程方式将它们引导到我的一个哈希表(接受对象吗?)?
我很好奇这个功能。我知道System.gc()
是命令,但我怎样才能实现第一个问题?我可以吗?
myTrashBin=System.gc().getObjectList(); //???
如果没有,可能有一种方法可以通过自定义类创建此功能。
最后一个问题:我们如何覆盖System.gc()?
感谢。
答案 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()?
你做不到。事实上它只是一个提示,因为它无法保证做任何事情。