gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 07:22:59 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com