1

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

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

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

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

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

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

谢谢。

4

4 回答 4

5

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

finalize()可能感兴趣,但请阅读此问题的答案以了解限制等。PhantomReferences也可能感兴趣。

于 2012-09-13T15:01:18.637 回答
1

我认为如果您实现该Finalize方法并在那里编写代码,您可以实现类似的目标:也许将对象添加到自定义列表

当垃圾收集器确定不再有对该对象的引用时,由对象的垃圾收集器调用

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

于 2012-09-13T15:02:42.053 回答
1

System.gc()发出对垃圾收集器的调用,但仅此而已。它可能会提高优先级,并且可能会更快地收集您的物品,但不能保证,正如文档所说:

调用 gc 方法表明 Java 虚拟机花费精力回收未使用的对象,以便使它们当前占用的内存可用于快速重用。当控制从方法调用返回时,Java 虚拟机已尽最大努力从所有丢弃的对象中回收空间。

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

于 2012-09-13T15:04:51.257 回答
1

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

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

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

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

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

于 2012-09-13T15:08:46.867 回答