跟踪已经看到的物体

Mar*_*lke 2 java object

我正在尝试为我的应用程序实现一个拦截器,它能够跟踪它看到的对象.我需要能够分辨出我现在看到的对象是新的还是重用的.

假设我有这样一个界面:

public interface Interceptor {
    void process(Object o);
}
Run Code Online (Sandbox Code Playgroud)

我一直在考虑添加一个可以跟踪这些对象的Set.但是既然我不想因这种行为导致内存泄漏,或许我应该设计一些其他模式?最后,这些对象可能会在其他层中被破坏.

可能的解决方案:

  • 将对象的hashCode放入Set中
  • 使用WeakHashSet而不是HashSet

第一个选项似乎不是100%可靠,因为hashCode可能不是唯一的.至于第二个选项,我不确定这会阻止memleaks.

还有一点需要注意,我无法修改对象,我无法添加字段,方法.包装也不是一种选择.

有任何想法吗?

Bri*_*new 5

WeakReferences是要走的路.从这里:

简单地说,弱引用是一个不足以强迫对象保留在内存中的引用.弱引用允许您利用垃圾收集器为您确定可达性的能力,因此您不必自己执行此操作.

即保持一个WeakReference不会强制JVM持有对该对象的引用.

当然,弱引用不足以阻止垃圾收集,因此您可能会发现(如果没有对小部件的强引用)weakWidget.get()突然开始返回null.