JVM参数学习笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liufang1991/article/details/80236681

JVM调优主要就是对垃圾回收器的调优

四种垃圾回收器

  • 串行 -XX:+UseSerialGC
  • 并行 -XX:+UseParallelGC -XX:+UseParalledlOldGC
  • 并发(CMS) -XX:+UseParNewGC -XX:+UseConcMarkSweepGC
    • -XX:+CMSParallelRemarkEnabled 降低标记停顿
    • -XX:+UseCMSInitiatingOccupancyOnly 使用手动定义初始化定义开始CMS收集 禁止hostspot自行触发CMS GC
    • -XX:CMSInitiatingOccupancyFraction=70 70%的时候进行回收
  • G1(Garbage first) -XX:+UseG1GC JDK1.7出现,将堆等大小分区,每一个区是一堆连续的虚拟内存地址,标记结束后决定回收最空置的堆区

最重要的参数

  • -Xms4096M -Xmx4096M: 初始堆大小,最大堆大小,最好设置一样
  • -XX:PermSize=128M -XX:MaxPermSize=128M 持久代大小,128M足够用了,设置一样
  • -Xmn2048m 年轻代大小,官方推荐设为JVM内存的3/8, 年轻代和年老代一般为1:2
  • -XX:+UseStringDeduplication : jdk1.8中可以对重复字符串优化
  • -XX:LargePageSizeInBytes=128m 设大一些可以更好的利用虚拟内存
  • -XX:MaxMetaspaceSize=256m java1.8开始Metaspace是没有指定默认值,是动态增加的,为了保证稳定最好设定一个最大值
  • -XX:ParallelGCThreads=8 并行或并发回收的线程数,推荐CPU的内核数
  • -Xss256k 设置每个线程堆栈的大小

GC日志

打印日志会影响性能,建议不要在生产环境中使用
-XX:+UseGCLogFileRotation
-XX:NumberOfGCLogFiles=< number of log files >
-XX:GCLogFileSize=< file size >[ unit ]
-Xloggc:/path/to/gc.log

内存溢出日志

-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=./java_pid.hprof
-XX:OnOutOfMemoryError=”< cmd args >;< cmd args >”
-XX:+UseGCOverheadLimit

字符串优化

-XX:+UseStringDeduplication java1.8才有的
-XX:+UseStringCache
-XX:+UseCompressedStrings
-XX:+OptimizeStringConcat

一些默认启动的参数

  • -server Server Hotspot VM, 在64位的jdk中默认启用
  • -XX:+DisableExplicitGC 禁用System.gc(),有说法在netty的nio去掉该配置项
  • -XX:+AggressiveOpts 加快编译,使用JVM开发团队的最优成果

猜你喜欢

转载自blog.csdn.net/liufang1991/article/details/80236681