JVM参数调优
1.栈
-Xss512k //设置栈空间的内存大小512K
2.堆
-Xms:堆空间最小值 //设置堆空间起始内存最小值
-Xmx:堆空间最大值 //设置堆空间最大值 开发阶段建议两者设置相同数值
-Xmn: 设置新生代的大小
-XX:NewRatio=2 // 表示新生代占1,老年代占2,新生代占用堆内内存的1/3
-XX:SurvivorRatio=8 //表示新生代中,Eden:survivor0:survivor1 = 8:1:1
-XX:MaxTenuringThreshold=15 //表示新生代对象15次还没有消亡的对象将移到老年代
-XX:TLABWasteTargetPercent=N //设置TLAB空间所占用Eden空间的百分比大小
-XX:useTLAB //设置是否开发TLAB,默认是开启的
3.垃圾回收期
1).Searial GC
-XX: +PrintCommandLineFlags:查看命令行相关参数(包含使用的垃圾收集器)
jinfo -flag 相关垃圾回收器参数 进程ID
-XX: +UseSerialGC //指定年轻代和老年代都使用串行收集器
等价于新生代使用Serial GC 老年代使用Serial Old GC
2).ParNew GC
-XX:+UseParNewGC //手动指定ParNew收集器,年轻的使用并行收集器,不影响老年代
-XX:ParallelGCThreads 限制线程数量,默认开启和CPU数据相同的线程数
3).Parallel Scavenge GC (又名Parallel GC)
-XX:+UseParallelGC //手动指定年轻代使用Parallel并行收集器执行内存回收任务
-XX:+UseParallelOldGC //手动指定老年代都是使用并行回收收集器.
上面两个参数,默认开启一个另一个也会被开启(互相激活)
-XX:ParallelGCThreads //设置年轻代并行收集器的线程数
-XX:MaxGCPauseMillies //设置垃圾收集器最大停顿时间(即STW的时间)
-XX:GCTimeRation //垃圾收集时间占总时间的比例,用于衡量吞吐量的大小
-XX: +UseAdaptiveSizePolicy //设置Parallel Scavenge收集器具有自适应调节策略,包括年轻代大小,Eden,Survivor的比例,都会被自动调整,以至于达到一种平衡点.
4)CSM GC
-XX:+UseConcMarkSweepGC //手动指定使用CMS收集器执行内存回收任务
开启该参数后会自动将-XX:+UseParNewGC打开。即:ParNew(Young区)+CMS(Old区用)+Serial Old(在老年代辅助CMS使用)的组合
-XX:CMSlnitiatingOccupanyFraction //设置堆内存使用率的阈值,一旦达到该阈值,便开始进行回收.
-XX: +UseCMSCompactAtFullCollection //用于指定在执行完FullGC后对内存空间进行压缩整理,以避免内存碎片的产生.
-XX:CMSFullGCsBeforceCompaction //设置在执行多少次Full GC后对内存空间进行压缩整理
-XX:ParallelCMSThreads //设置CMS的线程数量
CMS默认启动的线程数是(ParallerGCThreads+3)/4
5) G1 GC
-XX:+UseG1GC //启用G1垃圾回收
-XX:G1HeapRegionSize //设置每个Region的大小.值是2的幂,范围是1MB到32MB之间,目标是根据最小的Java堆大小划分出约2048个区域.
-XX:MaxGCPauseMillis //设置期望达到的最大GC停顿时间指标(JVM会尽力实现,但是不保证达到)默认值是200ms
--以上三个命令是常用命令----
-XX:ParallelGCThread //设置STW时GC线程数的值.最多设置为8
-XX:ConcGCThreads //设置并发标记的线程数.
-XX:InitiatingHeapOccupancyPercent //设置触发并发GC周期的Java堆占用率阈值.超过此值,就触发GC,默认值是45%
```bash
-XX:+PrintFlagsInitial //查看所有的参数的默认初始值
-XX:+PrintFlagsFinal //查看所有的参数的最终值
-XX:+PrintGCDetails //输出详细的GC处理日志
打印GC简要信息:1.-XX:PrintGC 2.-verbose:gc
-XX:HandlePromotionFailure //是否设置空间分配担保
HandlePromotionFailur=true ,在进行MinorGC之前,
会检查老年代最大可用空间是否大于历次晋升到老年代的对象的平均大小.如果大于,则进行MinorGC,否则进行FullGC
HandlePromotionFailur=false,则进行FullGC
-XX: +DoEscapeAnalysis //显示开启逃逸分析
-XX: +PrintEscapeAnalysis//查看逃逸分析的筛选结果
-XX: +EliminateAllocations //开启标量替换,(默认打开),允许将对象打散分配在栈上