Java string.intern没有使用更少的内存
我存储了大量相等的字符串。这些值不会经常改变 由于Java string.intern没有使用更少的内存,java,string,memory,Java,String,Memory,我存储了大量相等的字符串。这些值不会经常改变 由于string.intern()应该只返回引用,因此我在ArrayList中存储了一亿个完全相同的字符串列表 我本以为Java内存会下降,但存储普通字符串和插入字符串的差异不到0.1% 我是否遗漏了什么,或者这是预期的行为 列表生成代码 long max = 100000000; for(int i =0 ; i < max;i++ ){ list.add("sometextelidedforbrevity".
string.intern()
应该只返回引用,因此我在ArrayList
中存储了一亿个完全相同的字符串列表
我本以为Java内存会下降,但存储普通字符串和插入字符串的差异不到0.1%
我是否遗漏了什么,或者这是预期的行为
列表生成代码
long max = 100000000;
for(int i =0 ; i < max;i++ ){
list.add("sometextelidedforbrevity".intern());
}
long max=100000000;
对于(int i=0;i
没有的内存使用是124236KB,有124184KB。我使用的是字符串文本,我在文档中忽略了它,这要感谢cdhowie和Russel Zahniser在评论中给出的答案 他们已经在使用文字进行拘留
据我所知,让字符串不被插入的唯一方法是使用new String()。字符串文本自动插入。也就是说,表达式
“SomeTextElidedFor Breeficity”
在运行时将始终成为一个已插入的字符串
对象引用。对已插入的字符串调用intern()
实际上是不可行的。如何创建这些字符串?给我们看看你的代码。他们可能已经实习了。您是使用字符串文字还是new string()
?因为字符串文字是自动插入的…使用了多少内存?@cdhowie编辑以显示代码。像上面的注释一样,您的字符串已经自动插入,因为您使用的是文字字符串,因此内存相同。