Когда мы говорим, что интернированные строки хранятся в области постоянного поколения, то делает то же самое применимо и для строковых литералов? Или это только для строк, интернированных inter()?
Фактически сообщения в блоге обычно говорят, что пул строк содержит ссылку на строковый объект, а фактический строковый объект находится где-то в куче. также существует большая путаница в том, что постоянное поколение находится в куче или за его пределами. (я использовал jcosole, он показывает постоянный ген, отличный от heap.many сообщений говорят, что это часть кучи, и многие говорят, что это другое)
Edit: Также, когда я бежал:
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