java是否将垃圾签名的东西收集为对象?
如果是,我可以告诉java以编程方式将它们定向到我的哈希表之一(接受对象吗?)?
我对这个功能很好奇。我知道 System.gc()
是命令,但我怎样才能实现第一个问题?我可以吗?
myTrashBin=System.gc().getObjectList(); //???
如果没有,可能有一种方法可以通过自定义类创建此功能。
最后一个问题:我们如何覆盖 System.gc() ?
谢谢。
java是否将垃圾签名的东西收集为对象?
如果是,我可以告诉java以编程方式将它们定向到我的哈希表之一(接受对象吗?)?
我对这个功能很好奇。我知道 System.gc()
是命令,但我怎样才能实现第一个问题?我可以吗?
myTrashBin=System.gc().getObjectList(); //???
如果没有,可能有一种方法可以通过自定义类创建此功能。
最后一个问题:我们如何覆盖 System.gc() ?
谢谢。
这不在你的控制之下。如果您的对象无法访问,则 GC 将收集这些对象。System.gc()
无非是一个提示,不能依赖。
finalize()
可能感兴趣,但请阅读此问题的答案以了解限制等。PhantomReferences也可能感兴趣。
我认为如果您实现该Finalize
方法并在那里编写代码,您可以实现类似的目标:也许将对象添加到自定义列表
当垃圾收集器确定不再有对该对象的引用时,由对象的垃圾收集器调用
http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html#finalize%28%29
System.gc()
发出对垃圾收集器的调用,但仅此而已。它可能会提高优先级,并且可能会更快地收集您的物品,但不能保证,正如文档所说:
调用 gc 方法表明 Java 虚拟机花费精力回收未使用的对象,以便使它们当前占用的内存可用于快速重用。当控制从方法调用返回时,Java 虚拟机已尽最大努力从所有丢弃的对象中回收空间。
您最好采用其他方法,例如finalize()
方法或管理对象中的引用计数器,这样当它达到零时,您就知道它可以被收集。检查此链接。
Java 使用托管内存。这意味着 JVM 管理它,因为您不想这样做;)
我可以告诉java以编程方式将它们定向到我的一个哈希表(接受对象吗?)?
如果通过 WeakReference 引用它们,您可以以编程方式获取所有将被清理的对象。
我们如何覆盖 System.gc() ?
你不能。事实上,它只是一个提示,因为它不能保证做任何事情。