您的位置:首页 > 其它

JVM参数:-XX:StringTableSize

2017-07-14 18:57 190 查看
通过笨神的分享整理笔记:

常量池底层使用StringTable数据结构保存字符串引用,实现和HashMap类似,根据字符串的hashcode定位到对应的数组,遍历链表查找字符串,当字符串比较多时,会降低查询效率。

-XX:StringTableSize

在我们调用String.intern的时候会往hashtable里插入一项,这个table就是stringtable

使用最多的场景是序列化反序列化场景,为了避免同一个字符串被多次创建,保证每次通过string的intern返回的是同一个字符对象。

这个参数就是现在这个表的size。

如果这样参数很小,带来的问题很明显,就是hash碰撞,这样在查找字符串过程中可能会比较耗cpu

不过jdk6某个版本开始已经有了rehash的逻辑了

当冲突次数超过100次就会自动做rehash,但是表如果size小的话,那再怎么rehash也是冲突,只能换来的是不断做rehash,因此性能会比较差。

所以建议大家将这个参数设置成一个比较大的质数,减少冲突

症状的关键表现是:

通过perf才能看到 如果能看到stringtable的lookup方法占cpu很高 就是这个问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: