我存储了大量相等的字符串。这些值不会经常改变。

由于 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/

10-11 18:05