java - 关于使用基于枚举的单例缓存大对象(Java)

标签 java design-patterns oop hashmap

有没有更好的方法来缓存一些非常大的对象,这些对象只能创建一次,因此需要缓存?目前,我有以下内容:

public enum LargeObjectCache {  
    INSTANCE; 

    private Map<String, LargeObject> map = new HashMap<...>();

    public LargeObject get(String s) {  
        if (!map.containsKey(s)) {
            map.put(s, new LargeObject(s));
        }
        return map.get(s);
    }
}  

有几个类可以使用 LargeObjects,这就是为什么我决定对缓存使用单例,而不是将 LargeObjects 传递给使用它的每个类。

此外, map 不包含很多键(一个或两个,但键在程序的不同运行中可能会有所不同)那么,在这种情况下是否有另一个更有效的 map 可以使用?

最佳答案

您可能需要线程安全来确保您没有两个同名的实例。 这对于小 map 来说确实很重要,但您可以避免一次调用,这样可以加快速度。

public LargeObject get(String s) {  
    synchronized(map) {
        LargeObject ret = map.get(s);
        if (ret == null) 
            map.put(s, ret = new LargeObject(s));
        return ret;
    }
}

关于java - 关于使用基于枚举的单例缓存大对象(Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1149737/

相关文章:

java - 在现有的 JFrame 中重绘一个新的 JFrame?

java - Eclipse:设置 org.osgi.framework.system.packages.extra 以在 osgi 类加载器中包含 javafx 不起作用

c++在具有不同 map 的新类中重复行为

java - 正确使用单例设计模式

oop - 在 GUI 中拖放

涉及静态方法的php抽象类和接口(interface)?

java - Hibernate 继承建模

javascript - 实现 promise 模式

javascript - 创建对象属性的多个实例

java - Hibernate 不使用 spring boot 从 mysql 表返回数据