JVM关于堆的设置
-XX:+PrintFlagsInitial // 查看所有参数默认初始值
-XX:+PrintFlagsFinal // 查看所有参数最终值
-Xms: // 初始堆空间(默认物理内存 1/64)
-Xmx: // 最大堆空间(默认物理内存 1/4)
-Xmn: // 设置新生代大小
-XX:NewRatio: // 设置新生代与老年代占比(默认2 表示新生代1:老年代2)
-XX:SurvivorRatio // 设置新生代和 form , to 区的比例 模式是 8 表示 eden=8, s0=1,s2=1
-XX:MaxTenuringThreshold // 设置新生代最大年龄默认15
-XX:UseTLAB // 开启TLAB空间分配
-XX:TLABWasteTargetPercent // 设置TLAB空间占Eden大小, 默认1%
-XX:MetaspaceSize // 设置方法区 元空间的开始值 默认21m
-XX:MaxMetaspaceSize // 设置最大值
-XX:StringTableSize // 设置Stringtable
逃逸分析
-XX:+DoEscapeAnalysis // 开启逃逸分析(默认开启)
锁
-XX:-UseBiasedLocking // 禁用偏向锁(默认开启)
执行引擎
-XX:CompileThreshold // 设置代码热点执行n次后进行JIT编译 默认10000
-XX:-UseCounterDecay// 设置关闭半衰周期, 默认是开启的我们需要手动关闭这样就能保证程序运行的时间越久我们所有的代码都能够被JIT所编译
-XX:CounterHalfLifeTime// 设置半衰周期时间 秒
-Xint // 设置执行引擎采用纯解释器模式
-Xcomp // 完全采用编译模式执行
-Xmixed // 采用解释器+ 编译器执行
垃圾收集器
1. Serial 垃圾收集器配置
-XX:+UseSerialGC // 开启单线程的垃圾收集器, 默认老年代会开启 SerialOld 收集器
-XX:+UseParNewGC // parNew 是 Serial新生代的多线程版本, 开始 parNew 收集器 会默认老年代开启 SerialOld
2. ParallalGC 配置
-XX:+UseParallelGC //新生代收集器 jdk8默认收集器 默认会开启 parallelOld
-XX:+UseParallelOldGC
-XX:ParallelGCThreads // 设置年轻代GC线程数量一般与线程数相等
-XX:MaxGCPauseMillis // 设置垃圾收集器最大停留时间 STW的时间
-XX:GCTimeRatio // 设置垃圾占总时间的占比模式是99 也就是 垃圾收集器占用1% 的时间回收垃圾
-XX:+UseAdaptiveSizePolicy // 设置parallel收集器年轻代晋升老年代的对象年龄, 默认开始 不建议设置在设置了吞吐量后最好自动设置
3. CMS收集器
- 概述:
初始标记: 此阶段需要 stop the world 停止用户线程, 这个阶段只标记了GCRoots 能够直接关联到的对象, 由于直接关联的对象比较少所有速度快 用户线程暂停的时间短;
并发标记: 从RCRoots 直接关联的对象开始遍历整个对象图, 耗时长 但不需要停止用户线程,可以与垃圾收集线程一起并发执行;
重新标记: stop the world 由于并发标记 垃圾收集线程和用户线程同时执行, 因此修正用户线程程序运行而导致产生变化的那一部分对象标记记录, 这个阶段停止时间比初始阶段长, 但比并发标记时间短;
并发清理: 清理删除标记死亡的对象, 释放空间, 由于不需要移动对象 及整理, 所以可以和用户线程同时执行. 由于采用了并发清理 所以产生了内存碎片化的问题, 所以在内存分配的角度, 无法使用指针碰撞, 而是使用了空闲列表的方式分配内存
由于CMS和用户线程并发执行所有它不可能等到整个堆满了执行在执行, 而是有一个阈值 达到内存使用率后就会执行CMS, 要是CMS运行中没有可分配的内存了 会启用 Serial Old 收集器对整个堆进行收集;
-XX:+UseConcMarkSweepGC // 开启CMS收集器默认年轻代会开启parNew 收集器, 和老年代的 SerialOld 收集器
-XX:CMSInitiatingOccupancyFraction // 设置收集器的阈值 jdk5 是 68%进行CMS回收 jdk6及以上 是92%开启回收
-XX:+UseCMSCompactAtFullCollection // 设置CMS内存收集手进行内存整理,因整理内存无法并发执行开启后会导致GC时间变长;
-XX:CMSFullGCsBeforeCompaction // 设置执行多少次CMS后执行一次FullGC对内存进行整理
4. G1 垃圾收集器
-XX:+UseG1GC // 开启G1垃圾收集器
-XX:G1HeapRegionSIze// 设置 region的大小 要求设置为 2的次方, 范围 1-32m 之间,
-XX:MaxGCPauseMills // 设置期望GC最大停留时间 不保证能实现默认是200ms
垃圾收集日志参数
-XX:+PrintGC // 设置打印GC概要日志
-XX:+PrintGCDetails // 设置打印GC详细日志
-XX:+PrintGCDateStamps // 打印时间信息 和 gcDetails 一起使用
-XX:+PrintHeapAtGC // 在GC之前打印出堆信息
-Xloggc:/usr/local/cc.log // 设置gc输出目录