如何修改JVM String Pool大小?JDK11用XX:StringTableSize报错怎么办
问题原因与解决方案
1. 核心错误为语法不规范
你给出的两种参数写法都不符合HotSpot虚拟机-XX系列参数的定义规则:
所有-XX开头的数值类配置参数,标准语法为 -XX:<参数名>=<参数值>,你两次都漏写了StringTableSize参数名,也缺少必要的等于号,才会触发无效标识报错:
error: invalid flag: -XX1234
该错误是因为你直接把参数值拼接在-XX后面,完全没有填写参数名、冒号和等于号
error: invalid flag: -XX:1234
该错误是因为你只加了冒号,仍然漏写了StringTableSize参数名和等于号
2. 官方文档找不到-XX参数的原因
-XX开头的所有参数都属于HotSpot虚拟机的非标准私有参数,不属于Java SE官方规范约定的标准参数,因此在Java SE通用参考文档中不会收录,你需要查询对应版本HotSpot虚拟机的专属参数文档才能看到相关说明。
3. 参数有效性确认
JDK11版本中-XX:StringTableSize参数并未废弃,完全可以正常使用。
如果你要将字符串常量池大小设置为1234,正确的命令行写法如下:java -XX:StringTableSize=1234 你的主类全限定名
附加注意事项
- StringTableSize的取值必须为正整数,官方建议设置为素数,可降低哈希冲突概率,提升字符串常量池的查询性能
- 你可以执行
java -XX:+PrintFlagsFinal -version | grep StringTableSize命令,查看当前环境的默认StringTableSize取值,也可以用该命令验证参数配置后是否生效
内容的提问来源于stack exchange,提问作者HusenPatel
相关产品推荐
相关产品推荐

