Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java string.intern没有使用更少的内存_Java_String_Memory - Fatal编程技术网

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编辑以显示代码。像上面的注释一样,您的字符串已经自动插入,因为您使用的是文字字符串,因此内存相同。