永続生成領域に格納された文字列が格納されているとすると、同じことが文字列リテラルにも適用されますか?それとも、inter()によってインターンされた文字列の場合のみですか?文字列リテラルと永久生成メモリ領域
実際にはブログの投稿では文字列プールに文字列オブジェクトへの参照が含まれていると言われていますが、実際の文字列オブジェクトにはヒープのがあります。。また、永続的な世代がヒープであるかそれ以外であるかは非常に混乱しています。 (私はそれがheap.manyの記事から永久世代の異なる表示されjcosole使用は、ヒープの一部としてそれを言うと、多くは、それは違うと言う)
編集:また 私は走った:
public class stringtest2{
public static void main(String args[]){
int i=0;
List<String> list=new ArrayList<String>();
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 space
を期待していた。しかし、私は得た:
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 space
+1のJava 7の事実 –
+1参考です。 –
'Java.lang.OutOfMemoryError:Java heap space' - しかし、私はJava 6 update 29を使用しています。だから、' Java.lang.OutOfMemoryError:PermGen space'を取得する必要があります。 –