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

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传递给使用它的每个类的原因。

而且,该映射不包含许多键(一个或两个,但是该键在程序的不同运行中可能会有所不同),因此,在这种情况下,是否还有另一个更有效的映射可以使用?

最佳答案

您可能需要线程安全性,以确保没有两个同名实例。
对于小型地图而言,这确实很重要,但是您可以避免一次通话,这样可以使其更快。

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

07-24 09:45