总结两套JVM模版配置

总结两套JVM模版配置_第1张图片总结两套JVM模版配置_第2张图片

大白话:

        1.秒杀场景,Eden会设置的比较大;

        2.FullGC是代价最高的GC,频率越低越好。总结两套JVM模版配置_第3张图片

大白话: 

        一般情况下,设置JVM堆内存为物理机内存的一半,最大不超过3/4;

        -Xmn3072M - 设置新生代的内存大小,如果不是秒杀系统,一般可以调整为1G或2G;

        -Xss1M - 设置单个线程栈大小,一般默认512~1024kb,单个线程栈大小跟操作系统和JDK版本都有关系,设置1M、2M。

        -XX:PermSize=256M - 设置永久代初始内存大小,永久代大小的设置,跟你是什么应用(比如秒杀系统)没有多大关系,因为永久代是装载类文件的,一般设置256/512M就可以;

        -XX:MaxPermSize=256M - 设置永久代最大内存大小;

        -XX:+UseParNewGC - 新生代启用ParNew垃圾收集器;

        -XX:+UseConcMarkSweepGC - 老年代启用CMS垃圾收集器;

        -XX:CMSInitiatingOccupancyFaction=92  -老年代触发FullGC的阈值;

        -XX:+UseCMSCompactAtFullCollection - 众所周知CMS垃圾收集会存在碎片化问题,该参数作用让FullGC之后做压缩整理(减少碎片);

        -XX:CMSFullGCsBeforeCompaction=0 - 多少次FullGC之后压缩一次,默认是0,代表每次FullGC后都会压缩一次,如果设置为2,则表示2次FullGC后,才会进行一次压缩整理;

       -XX:+CMSParallelInitialMarkEnabled - 启动并发标记,在初始标记阶段,会STW,导致服务中断,这个时候怎么办呢,一种方式是将初始标记阶段变为多线程,减少初始标记阶段停顿时间;

      -XX:+CMSScavengeBeforeRemark - 在重新标记阶段,会STW,导致服务中断,这个时候,在执行重新标记前,先执行一次YGC,因为重新标记主要管的是新创建的对象(新生代),先执行一次YGC,新生代中的垃圾对象都会被提前清除掉,这样再扫描对象,对象就会少很多,从而降低STW停顿时间。

正常情况下,还可以设置一些其他参数,比如日志输出等等。

总结两套JVM模版配置_第4张图片总结两套JVM模版配置_第5张图片

大白话:

        -Xloggc:/home/shared/log/gc-server.log - 保存gc日志;

        -XX:ParallelGCThread=2 - GC并发线程数量,一般默认8,如果对垃圾回收要去不高,可以降低线程数量;

        -XX:MetaspaceSize=64m

        -XX:MaxMetaspaceSize=128M - 元数据空间不能太大,太大会把整个系统内存占满,一般需要做下限制,设置64/128/256都是可以的;

        -XX:UseFastAccessorMethods - 开关,访问Java类的时候,可以通过快速访问器访问Java方法,简单理解就是不通过get/set方法去访问,get/set方法太多会影响执行效率,这个时候,可以不通过get/set方法访问,可以直接去访问字段,不过在JDK11后被取消了,所以这个参数不是特别重要;

        -XX:+PrintGCDetails - 打印GC的详细信息;

        -XX:+PrintGCApplicationStoppedTime - 打印GC服务停止时间;

        -XX:+PrintGCDateStamps - 打印GC时间戳;

        -XX:+PrintHeapAtGC - 在进行GC的前后打印出堆的信息;

        -XX:+UseGCLogFileRotation - 开启滚动生成日志;

       -XX:+NumberOfGCLogFiles=10 - 滚动GC日志文件数,默认0不滚动;

        -XX:GCLogFileSize=50M - GC文件滚动大小,需开启UseGCLogFileRotation;

        -XX:HeapDumpOnOutMemoryError - 发生OOM时,dumpJVM堆栈信息;

        -XX:HeapDumpPath=/usr/local/oom - dump的堆栈信息保存路径;

你可能感兴趣的:(Java,jvm,java)