gpt4 book ai didi

java - 如何优化代码以始终使用对 String 的相同引用而不增加内存使用量?

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

我正在处理一个有很多重复字符串的应用程序,我的任务是消除它们以减少内存使用。我的第一个想法是使用 String.intern 来保证只存在一个 String 引用。它可以减少堆内存,但它增加了 PermGen 的方式太多了;事实上,因为有很多字符串只声明一次,所以应用程序使用的内存总量实际上增加了。

在搜索其他想法后,我找到了这种方法:https://stackoverflow.com/a/725822/1384913 .

发生了与 String.intern 相同的事情:String 使用量减少了,但我节省的内存正在 WeakHashMapWeakHashMap$Entry 类中使用。

是否有一种有效的方法来为每个字符串只维护一个引用,而不会花费与我正在恢复的内存量相同的内存量?

最佳答案

我找到了 WeakHashMap 的替代品:Eclipse JDT 库提供的 WeakHashSet。它具有与 WeakHashMap 相同的行为,但它使用的内存更少。此外,您只需调用方法 add ,它会在集合中添加不存在的字符串,否则返回现有的字符串。

我唯一不喜欢的是它不使用泛型,迫使开发人员强制转换对象。我的 intern 方法非常简单,如下所示:

WeakHashSet 的声明:

private static WeakHashSet stringPool = new WeakHashSet(30000); //30 thousand is the average number of Strings that the application keeps.

和实习生方法:

public static String intern(String value) {
if(value == null) {
return null;
}
return (String) stringPool.add(value);
}

关于java - 如何优化代码以始终使用对 String 的相同引用而不增加内存使用量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12901620/

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