gpt4 book ai didi

java - 优化 Java 中字符串集合的内存使用

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:05:40 25 4
gpt4 key购买 nike

我有大量的名称-值对(大约 100k),我需要将它们存储在某种缓存(例如 HashMap )中,其中值是一个字符串,平均大小约为 30k 字节。

现在我知道了一个事实,即大量值具有完全相同的字符串数据。为了避免多次分配相同的字符串数据,我想以某种方式重用以前分配的字符串,从而消耗更少的内存。此外,这需要相当快。即逐个扫描所有先前分配的值不是一种选择。

关于如何解决这个问题有什么建议吗?

最佳答案

不要使用 String.intern(多年来一直存在与此相关的各种内存问题)。相反,创建您自己的缓存,类似于 String.intern。基本上,您需要一个 Map,其中每个键都映射到自身。然后,在缓存任何字符串之前,您“实习”它:

private Map<String,WeakReference<String>> myInternMap = new WeakHashMap<String,,WeakReference<String>>();
public String intern(String value) {
synchronized(myInternMap) {
WeakReference<String> curRef = myInternMap.get(value);
String curValue = ((curRef != null) ? curRef.get() : null);
if(curValue != null) {
return curValue;
}

myInternMap.put(value, new WeakReference<String>(value));
return value;
}
}

请注意,您对键和值使用弱引用,这样您就不会保留对不再使用的字符串的引用。

关于java - 优化 Java 中字符串集合的内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/725640/

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