一 点睛
-
字符串常量池是不会存储相同内容的字符串的。
-
String 的 String Pool是一个固定大小的 Hashtable,默认值大小长度是1009。如果放进 String Pool 的 String非常多,就会造成 Hash 冲突严重,从而导致链表会很长,而链表长了后直接会造成的影响就是当调用string.intern时性能会大幅下降。
-
使用 -XX:StringTableSize 可设置 StringTable 的长度
-
在 JDK6 中 StringTable是固定的,就是1009的长度,所以如果常量池中的字符串过多就会导致效率下降很快。StringTablesize 设置没有要求。
-
在 JDK7 中,StringTable 的长度默认值是 60013。
-
在 JDK8 中,StringTable 可以设置的最小值为1009。
二 实战——StringTableSize值测试
1 代码
/**
* 测试 StringTableSize
* -XX:StringTableSize=1009
*/
public class StringTest2 {
public static void main(String[] args) {
// 测试StringTableSize 参数
System.out.println("我来打个酱油");
try {
Thread.sleep(1000000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}