gpt4 book ai didi

java - 一旦 GC 确定它无法访问,是否有一种方法可以回收复杂的 java 对象

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:15:11 25 4
gpt4 key购买 nike

在 C++ 中,我使用引用计数对象来实现“自动”回收对象池的 for

SmartPointer<ObjType> object = pool.getObject(); // hold reference

// ... do stuff with object over time.

object = nullptr; // that is when reference
// count goes to 0

-- 现在我在 C++ 对象上有一个“onFinalRelease()”方法,当引用计数达到 0 时调用该方法。我可以覆盖它(默认为 delete(this) )以自动回收对象而不是销毁它们。

问题是我能否使用 java 引用类型和引用池的某种组合来实现此模式。当然,这是一种大型复杂的类型,在有意义的情况下创建对象是昂贵的。那就是我想做的:

SomeReference r = referenceQueue.getReference();

pool.recycle(r.takeBackUnusedObjectFromGC()); // ??????????????????????????

这真是太好了:)

最佳答案

您可以使用 PhantomReference我们要做这样的事情。拥有一个接口(interface)(代理)对象,该对象具有对昂贵对象的(强,单向)引用。还要在池管理中保持对昂贵对象的强烈引用。为接口(interface)对象保留一个 PhantomReference。一旦 PhantomReference 出现在它的 ReferenceQueue 上,您就可以确定昂贵的对象没有通过接口(interface)对象使用(甚至允许完成)。现在可以使用新的接口(interface)对象重用昂贵的对象。

但是,这可能不值得。

关于java - 一旦 GC 确定它无法访问,是否有一种方法可以回收复杂的 java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8794440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com