【发布时间】:2013-03-21 18:52:40
【问题描述】:
我存储了大量相等的字符串。这些值不会经常变化。
由于 string.intern() 应该只返回引用,我将一亿个完全相同的字符串列表中的每一个都进行了实习,存储在 ArrayList 中。
我预计 Java 内存会大幅下降,但存储普通字符串与存储字符串的差异不到 0.1%。
我错过了什么还是这是预期的行为?
列表生成代码
long max = 100000000;
for(int i =0 ; i < max;i++ ){
list.add("sometextelidedforbrevity".intern());
}
内存使用量为 1 242 360 KB 和 1 242 184 KB。
【问题讨论】:
-
你是如何创建这些字符串的?向我们展示您的代码。他们可能已经被拘留了。
-
您使用的是字符串文字还是
new String()?因为字符串字面量是自动实习的... -
正在使用多少内存?
-
@cdhowie 编辑显示代码。
-
像上面的 cmets 一样,你的字符串已经被自动实习了,因为你使用的是文字字符串,因此内存相同。