我已经存储了大量相同的字符串。这些值不会经常更改。
由于`string.intern()`应该只返回引用,因此我将一个包含100百万个完全相同的字符串的列表中的每个字符串都进行了intern处理,然后存储在一个`ArrayList`中。
我预期Java内存使用量会大幅下降,但是与普通字符串相比,存储interned字符串的差异小于0.1%。
我是否遗漏了什么?或者这是预期的行为?
代码生成列表如下:
由于`string.intern()`应该只返回引用,因此我将一个包含100百万个完全相同的字符串的列表中的每个字符串都进行了intern处理,然后存储在一个`ArrayList`中。
我预期Java内存使用量会大幅下降,但是与普通字符串相比,存储interned字符串的差异小于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()
?因为字符串字面值会自动进行内部化... - Russell Zahniser