1、字符串常量池
jvm 底层使用hash表来存储字符串常量池
如果有太多的字符串需要入池,而StringTableSize比较小的话,会导致更多的hash冲突,降低性能。
设置:
-XX:StringTableSize=20000
:常量池hash表的大小,注意这个不是表示只能存储20000个字符串常量,而是hash表key的槽个数,参考hashmap键值的存放,而这个不能自动扩容-XX:PrintStringTableStatistics
: 打印常量池的使用情况
2、设置元空间内存
元空间是jdk1.8后方法区的实现,用来存储字节码
设置:
-XX:MaxMetaspaceSize=8m
3、设置永久代内存
jdk1.8之前,方法区使用永久代内存来存储字节码和常量池
设置:
-XX:MaxPermSize=8m
4、禁用显式的垃圾回收
禁用自己代码里显式调用垃圾回收System.gc();
Full GC
设置:
-XX:+DisableExplicitGC