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

image.png