インターンされた文字列が永続的な世代領域に格納されると言うとき、同じことが文字列リテラルにも当てはまりますか? それとも、inter() によってインターンされた文字列のみですか?
実際、ブログの投稿では通常、文字列プールには文字列オブジェクトへの参照が含まれているが、実際の文字列オブジェクトはheapのどこかにあると言われています。また、永久世代がヒープ内にあるか、ヒープ外にあるかについても非常に混乱しています。(私は 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