public static void main(String[] args) {
System.out.println("Hello");
//使用list保持常量池引用,避免GC回收
List list = new ArrayList();
int i = 0;
while (true){
list.add(String.valueOf(i).intern());
i ++;
}
}
}2. 配置运行JVM参数,使用JDK6、JDK7、JDK8版本查看运行结果。JVM参数中固定了堆空间、永久代或元空间的大小。
参数说明:
-Xms:初始化堆空间大小
-Xmx: 最大堆空间大小
-XX:PermSize: 代初始永久代大小
-XX:MaxPermSize:最大永久化大小
-XX:MetaspaceSize:初始化元空间大小
-XX:MaxMetaspaceSize:最大元空间大小
JDK6运行,报了 java.lang.OutOfMemoryError: PermGen space 的错误,可见JDK6字符串常量池是保存在永久代中。
JDK7、JDK8运行,都报了 java.lang.OutOfMemoryError: Java heap space 的错误,可见JDK7、JDK8字符串常量池是保存在堆空间中。