Java 带代理/缓存的优雅GC

Java 带代理/缓存的优雅GC,java,caching,garbage-collection,Java,Caching,Garbage Collection,我正在设计一个框架,作为该框架的一部分,我正在做一个非常简单的紧凑的对象缓存池,以提高创建和收集对象的性能和峰值 更具体地说,该逻辑更像是一个LRU列表,由池管理器抽象而成,该池管理器为该框架上的消费者/开发人员提供acquire()和release()。缓存的项还使用代理进行包装(为了实现特定方法的内部接口,为了更好地收集对象,会截取这些方法) 如果开发人员严格要求每次都调用release(),并且我们都知道会有孩子习惯性地忘记这一点,那么这种方法很有效 因此,我希望能够检查对缓存项“acqu

我正在设计一个框架,作为该框架的一部分,我正在做一个非常简单的紧凑的对象缓存池,以提高创建和收集对象的性能和峰值

更具体地说,该逻辑更像是一个LRU
列表
,由池管理器抽象而成,该池管理器为该框架上的消费者/开发人员提供
acquire()
release()
。缓存的项还使用代理进行包装(为了实现特定方法的内部接口,为了更好地收集对象,会截取这些方法)

如果开发人员严格要求每次都调用
release()
,并且我们都知道会有孩子习惯性地忘记这一点,那么这种方法很有效

因此,我希望能够检查对缓存项“acquired”的引用是否只是我的池管理器(假设消费者已将
cacheRef=null;
cacheRef
超出范围。这样,我可以根据其TTL将缓存项管理回池或GC

这变得非常关键,鉴于这些健忘的孩子,当潜在消费者无法再访问这些服务对象时,池很快就会耗尽,服务可能会下降


提前感谢为实现这一点提供的提示和指针。

如果必须使用安全网,您希望使用并记录错误(vs显式发布)@BenManes谢谢你的指点。必须承认,我对
WeakReference
PhantomReference
的理解还不足以实现我想要的…我脑海中的一些疑问是:1.如果创建
PhantomReference
并使用
ReferenceQueue
我如何准确地将对象返回到请求的类型?2由于我的缓存管理器对缓存对象有很强的引用,所以不会有GC(对此我非常确定).因此,我怀疑弱引用或幻影引用是否适用于我的情况。是否有任何特定的文章或博客文章可供您推荐作为虚拟引用?Ben Manes,祝贺您的回答。这篇文章非常有用。@Sathyan请参阅文章的示例,这正是您试图做的。资源代理是GC'd,而不是资源,并用于识别资源泄漏。如果代理已发布,则删除幻影引用映射并清除它。否则,您将检测泄漏、清理并记录错误。@BenManes非常感谢您的帮助…我现在了解了情况…现在必须测试几次才能感觉舒服。我如何标记您的answer为正确答案?或对您的帮助表示感谢/赞扬?如果必须使用该安全网,您希望使用并记录错误(vs明确发布)@BenManes谢谢你的指点。必须承认,我对
WeakReference
PhantomReference
的理解还不足以实现我想要的…我脑海中的一些疑问是:1.如果创建
PhantomReference
并使用
ReferenceQueue
我如何准确地将对象返回到请求的类型?2由于我的缓存管理器对缓存对象有很强的引用,所以不会有GC(对此我非常确定).因此,我怀疑弱引用或幻影引用是否适用于我的情况。是否有任何特定的文章或博客文章可供您推荐作为虚拟引用?Ben Manes,祝贺您的回答。这篇文章非常有用。@Sathyan请参阅文章的示例,这正是您试图做的。资源代理是GC'd,而不是资源,并用于识别资源泄漏。如果代理已发布,则删除幻影引用映射并清除它。否则,您将检测泄漏、清理并记录错误。@BenManes非常感谢您的帮助…我现在了解了情况…现在必须测试几次才能感觉舒服。我如何标记您的a回答正确吗?还是感谢您的帮助?