01
JVM配置官方文档
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html
02
运行时数据区 — 虚拟机栈
-Xss256k:设置虚拟机栈大小
03
运行时数据区 — 堆
-XX:+PrintFlagsInitial:查看所有参数的默认初始值
-XX:+PrintFlagsFinal:查看所有参数的最终值(可能会存在修改、不再是初始值)
具体查看某个参数的指令:①jps:查看当前运行中的进程;②jinfo -flag SurvivorRatio 进程ID
-Xms:初始堆空间内存(默认为物理内存的 1/64)
-Xmx:最大堆空间内存(默认为物理内存的 1/4)
-Xmn:设置新生代的大小。(初始值及最大值,通常不用这个配置)
-XX:NewRatio:配置新生代与老年代在堆结构中的占比,默认是2。如配置-XX:NewRatio=3:新生代占堆内存的1/4,老年代占3/4
-XX:SurvivorRatio:设置新生代中Eden和S0/S1空间的比例
-XX:MaxTenuringThreshold:设置新生代垃圾最大年龄
-XX:PrintGCDetails:输出详细的GC处理日志
-XX:PrintGC:打印GC简要信息
-verbose:gc:打印GC简要信息
-XX:HandlePromotionFailure:是否设置空间分配担保。JDK7及以后此参数已经没什么影响了,可以看做-XX:HandlePromotionFailure=true
04
运行时数据区 — 方法区
JDK7及以前:
-XX:PermSize:设置永久代初始分配空间。默认值是20.75M
-XX:MaxPermSize:设置永久代最大可分配空间。32位及其默认是64M,64位及其默认是82M
JDK8及以后:
-XX:MetaspaceSize
-XX:MaxMetaspaceSize
元数据区大小默认值依赖于平台。Windows下,"-XX:MetaspaceSize"默认是21M。"-XX:MaxMetaspaceSize"默认值是-1,就是最大值无限制,一般不会限制元空间最大值,因为元空间使用本地内存
05
逃逸分析
-XX:+DoEscapeAnalysis:显示开始逃逸分析
-XX:+PrintEscapeAnalysis:查看逃逸分析分筛选结果
-XX:+EliminateAllocations:标量替换参数设置,开启了标量替换(默认打开),允许将对象打散分配在栈上。
05
设置StringTable
-XX:StringTableSize:可以设置 StringTable 的长度
05
垃圾回收器
-XX:+PrintCommandLineFlags:查看命令行相关参数(包含使用的垃圾收集器)
-XX:UseSerialGC:指定年轻代和老年代都是用串行收集器。等价于新生代使用 Serial,老年代使用Serial Old
使用ParNew垃圾收集器:
-XX:UseParNewGC:表明新生代使用 ParNew 垃圾收集器
-XX:ParallelGCThreads:限制线程数量,默认开启和CPU数据相同的线程数
使用CMS垃圾收集器
-XX:_UseConcMarkSweepGC:手动指定使用CMS收集器执行内存回收任务
开启该参数后会自动将 -XX:UseParNewGC 打开。即:ParNew(Young区用)+CMS(Old区用)+Serial Old的组合
-XX:CMSInitiatingOccupanyFraction:设置堆内存使用率的阈值,一旦达到阈值,就开始进行回收
JDK 5 及以前默认值是 68,即当老年代空间使用率达到 68%时会触发CMS回收。JDK6及以后默认值是92
如果内存增长较慢,可以设置一个较大的值,大的阈值可以降低CMS触发频率,减少回收次数,改善程序性能。如果内存增长很快,就应该设置一个较小的值,降低阈值,以免触发Serial Old回收器。此参数可以有效降低Full GC次数。
-XX:+UseCMSCompactAtFullCollection:用于指定在Full GC之后对内存空间进行压缩整理,以避免内存碎片的产生。不过由于内存压缩无法并发执行,所以STW时间会变长。此参数和 -XX:CMSFullGCsBeforeCompaction 配合使用
-XX:CMSFullGCsBeforeCompaction:设置在执行多少次Full GC之后进行内存空间的压缩整理
-XX:ParallelCMSThreads:设置CMS线程数量
默认是 (ParallelGCThreads + 3)/ 4,ParallelGCThreads是年轻代并行收集器的线程数量。
使用 G1 垃圾收集器
-XX:+UseG1GC:手动指定使用G1收集器执行内存回收任务
-XX:G1HeapRegionSize:设置每个Region的大小。值是2的幂,范围是1MB到32MB之间,目标是根据最小的Java堆大小划分出约2048个区域。默认是堆内存的1/2000
-XX:MaxGCPauseMillis:设置期望达到的最大GC停顿时间指标(JVM会尽力实现,但不保证达到)。默认是200ms
-XX:ParallelGCThread:设置STW时GC线程数量。最多是8
-XX:ConcGCThreads:设置并发标记的线程数量。设置成ParallelGCThread的 1/4 左右
-XX:InitiatingHeapOccupancyPercent:设置出发并发GC周期的Java堆占用率阈值。超过此值,就出发GC,默认是45。
G1回收器常见操作步骤
第一步:开启G1垃圾收集器
第二步:设置堆的最大内存
第三部:设置最大停顿时间
05
GC日志打印配置
-XX:+PrintGC:输出GC日志。类似:-verbose:gc
-XX:+PrintGCDetails:输出GC的详细日志
-XX:+PrintGCTimeStamps:输出GC的时间戳(以基准时间的形式)
-XX:+PrintGCDateStamps:输出GC的时间戳(以日期的形式,如:2013-05-04+21:23:59.234+0800)
-XX:+PrintHeapAtGC:在进行GC的前后打印出堆的信息
-Xloggc:../logs/gc.log:日志文件输出路径
扫码关注我
微信号|fancheng1995
你们点点“分享”,给我充点儿电吧~