java - 垃圾收集在内部 Map 中跟踪其自身实例的对象

标签 java garbage-collection dictionary object

在我的类的构造函数中,我将当前对象 (this) 及其键(在构造函数中作为参数输入的字符串)映射到静态 LinkedHashMap,以便我可以引用在我以后可能需要的任何地方通过字符串对象。

这是代码(如果有帮助的话):

public class DataEntry {
    /** Internal global list of DataEntry objects. */
    private static LinkedHashMap _INTERNAL_LIST;

    /** The data entry's name. */
    private String NAME;

    /** The value this data entry represents. */
    private Object VALUE;


    /** Defines a DataEntry object with a name and a value. */
    public DataEntry( String name, Object value )
    {
        if( _INTERNAL_LIST == null )
        {
            _INTERNAL_LIST = new LinkedHashMap();
        }

        _INTERNAL_LIST.put( name, this );

        NAME = name;
        VALUE = value;
    }
}

问题?当我使用完此类的实例时,它们不会被垃圾回收。

我只是好奇是否有一种方法可以让此类的实例在我使用完它们后自行清理,而不必每次都手动调用Remove()方法或其他方法(以在内部删除其引用)我的意思是,当我不再使用 LinkedHashMap 时)。

最佳答案

将值设为 WeakReferences (或 SoftReferences )。这样这些值仍然可以被垃圾收集。当然,您在映射中仍然会有条目 - 但您可以定期清除映射中弱/软引用现在为空的任何条目。

关于java - 垃圾收集在内部 Map 中跟踪其自身实例的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/346762/

相关文章:

java - 过滤消息的 HTTP 响应

java - 不可解析的父 POM : Could not find artifact

python 实验 gc 和 memory_profiler

ios - 一键Swift对应多个字典的字典

java - 如何在 JDeveloper 的调试中评估自定义表达式

java - 在这种情况下如何为 GSON 指定通用类型

Android 垃圾收集器释放内存

.net - 有关如何避免客户端应用程序中 GC 延迟的建议

image - 使用 maphilight.js 的响应式图像

python - python 中的映射函数在解包值时抛出错误