我存储了大量相同的字符串。价值不会经常改变。
由于string.intern()
应仅返回引用,因此我将每个存储在ArrayList
中的1亿个完全相同的字符串列为每个。
我希望看到Java内存减少,但是存储正常字符串与实习字符串的差异小于.1%。
我错过了什么或这是预期的行为吗?
列表生成代码
long max = 100000000;
for(int i =0 ; i < max;i++ ){
list.add("sometextelidedforbrevity".intern());
}
没有的内存使用是1 242 360 KB和1 242 184 KB。
答案 0 :(得分:4)
字符串文字自动实现。也就是说,表达式"sometextelidedforbrevity"
将始终在运行时变为已被实习的String
对象引用。在已经实现的字符串上调用intern()
实际上是无操作。
答案 1 :(得分:0)
我正在使用字符串文字,我在文档中忽略了这一点,感谢cdhowie和Russel Zahniser在评论中的回答。
他们已经通过使用文字进行实习。
根据我的理解,不使用字符串的唯一方法是使用新的String()。