String Pool 底层 Hashtable 结构的说明与实战

一 点睛

  • 字符串常量池是不会存储相同内容的字符串的。

  • 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();
        }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值