当我们说实际的字符串存储在永久生成区域中时,同样适用于字符串文字?或者只是被inter()所拘留的字符串?
实际上,博客文章通常表示,字符串池包含对字符串对象的引用,而实际的字符串对象是堆中的某个位置.也有非常混乱,无论永久代是IN堆还是在它之外. (我使用jcosole它显示永恒根不同于heap.many帖子说它作为堆的一部分,许多人说它是不同的)
编辑:
当我跑的时候
public class stringtest2{
public static void main(String args[]){
int i=0;
List list=new ArrayList();
while(true){
String s="hello"+i;
String s1=i+"hello";
String s2=i+"hello"+i;
System.out.println(s);
s.intern();
s1.intern();
s2.intern();
list.add(s);
list.add(s1);
list.add(s2);
i++;
}
}
}
我期待Java.lang.OutOfMemoryError:PermGen空间但我得到:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2760)
at java.util.Arrays.copyOf(Arrays.java:2734)
at java.util.ArrayList.ensureCapacity(ArrayList.java:167)
at java.util.ArrayList.add(ArrayList.java:351)
at stringtest2.main(stringtest2.java:20)
不应该是Java.lang.OutOfMemoryError:PermGen空间