gpt4 book ai didi

Java收集和内存优化

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:59:06 25 4
gpt4 key购买 nike

我为一个自定义表编写了一个自定义索引,该表使用 500MB 堆存储 500k 字符串。只有 10% 的字符串是唯一的;其余的都是重复的。每个字符串的长度为 4。

我如何优化我的代码?我应该使用另一个集合吗?我尝试实现自定义字符串池以节省内存:

public class StringPool {

private static WeakHashMap<String, String> map = new WeakHashMap<>();

public static String getString(String str) {
if (map.containsKey(str)) {
return map.get(str);
} else {
map.put(str, str);
return map.get(str);
}
}
}

private void buildIndex() {
if (monitorModel.getMessageIndex() == null) {
// the index, every columns create an index
ArrayList<HashMap<String, TreeSet<Integer>>> messageIndex = new ArrayList<>(filterableColumn.length);
for (int i = filterableColumn.length; i >= 0; i--) {
// key -> string, value -> treeset, the row wich contains the key
HashMap<String, TreeSet<Integer>> hash = new HashMap<>();
messageIndex.add(hash);
}
// create index for every column
for (int i = monitorModel.getParser().getMyMessages().getMessages().size() - 1; i >= 0; --i) {
TreeSet<Integer> tempList;

for (int j = 0; j < filterableColumn.length; j++) {
String value = StringPool.getString(getValueAt(i, j).toString());
if (!messageIndex.get(j).containsKey(value)) {
tempList = new TreeSet<>();
messageIndex.get(j).put(value, tempList);
} else {
tempList = messageIndex.get(j).get(value);
}

tempList.add(i);
}
}
monitorModel.setMessageIndex(messageIndex);
}
}

最佳答案

无需提出自定义池。只需使用 String.intern() .

关于Java收集和内存优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11973785/

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