string.intern不使用更少的内存

时间:2013-03-21 18:52:40

标签: java string memory

我存储了大量相同的字符串。价值不会经常改变。

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

2 个答案:

答案 0 :(得分:4)

字符串文字自动实现。也就是说,表达式"sometextelidedforbrevity"将始终在运行时变为已被实习的String对象引用。在已经实现的字符串上调用intern()实际上是无操作。

答案 1 :(得分:0)

我正在使用字符串文字,我在文档中忽略了这一点,感谢cdhowie和Russel Zahniser在评论中的回答。

他们已经通过使用文字进行实习。

根据我的理解,不使用字符串的唯一方法是使用新的String()。