我存储了大量相等的字符串。这些值不会经常改变。
由于 string.intern()
应该只返回引用,因此我将 1 亿个完全相同的字符串列表中的每一个都放在了一个 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。
最佳答案
字符串文字是自动实习的。也就是说,表达式 "sometextelidedforbrevity"
将始终在运行时成为已被 intern 的 String
对象引用。在一个已经被实习的字符串上调用 intern()
实际上是一个空操作。
关于java - string.intern 不使用更少的内存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15555801/