堆空间
-Xms32m
初始堆空间
-Xmx32m
最大可用堆空间
-Xmn1m
新生代的大小
-XX:NewRatio=2
老年代/新生代
-Xss128K
线程的最大栈空间
-XX:TargetSurvivorRatio=15
survivor区的目标使用率
堆溢出处理
-XX:+HeapDumpOnOutOfMemoryError
导出内存溢出时整个堆信息
-XX:HeapDumpPath=d:/a.dump
导出堆dump文件的存放路径
-XX:-UseGCOverheadLimit
禁止GC效率低下引起的OOM
设置相等
减少程序运行时进行垃圾回收次数,从而提高程序的性能
基本策略
尽可能将对象预留在新生代,减少老年代GC的次数
JVM优化
-XX:+UseCompressedOops
开启压缩(默认)
允许在64位JVM中内存引用地址为32位
-XX:+DoEscapeAnalysis
开启逃逸分析 (默认)
-XX:+EliminateAllocations
标题替换(默认)
TLAB
-XX:+UseTLAB
开启TLAB(l默认)
TLAB
Thread Local Allocation Buffer
线程本地分配缓存
-XX:+PrintTLAB
打开跟踪TLAB参数
-XX:TLABSize=102400
手工指定TLAB的大小
-XX:-ResizeTLAB
禁用自动调整TLAB的大小
-XX:TLABRefillWasteFraction=100
TLAB中允许产生浪费的比例(默认值为64)
约为1/64的TLAB空间大小作为 refill_waste
垃圾回收
垃圾回收器
-XX:+UseParallelGC
新生代使用ParallelGC回收器,老年代使用串行收集器
-XX:+UseConcMarkSweepGC
新生代使用ParNew回收器,老年代使用CMS
串行回收器
-XX:+UseSerialGC
新生代、老年代都使用串行垃圾回收器
-XX:SurvivorRatio=2
新生代中 eden空间和from/to空间的比例关系
-XX:PretenureSizeThreshold=1000
对象直接晋升到老年代的阈值
-XX:MaxTenuringThreshold=15
新生代对象的最大年龄(默认15)
并行GC
-XX:+UseParNewGC
新生代使用ParNew回收器,老年代使用串行收集器
-XX:+UseParallelOldGC
新生代使用ParallelGC回收器,老年代使用ParallelOldGC回收器
-XX:ParallelGCThreads
ParNew回收器线程数量
CPU数量
CPU数量大于8时
CPU_Count*5/8+3
-XX:MaxGCPauseMillis
设置最大垃圾收集停顿时间
使用较小的堆
-XX:GCTimeRatio
设置吞吐量大小
系统将花费不超过1/(1+n)的时间用于垃圾收集
默认情况下 1/(1+99)
-XX:UseAdaptiveSizePolicy
打开自适应的GC策略
自动调整:新生代的大小、eden和survivior的比例、晋升老年代的对象年龄等
CMS
-XX:+UseConcMarkSweepGC
启用CMS回收器
-XX:-CMSPrecleaningEnabled
CMS 不进行预清理
-XX:ParallelCMSThreads
并发线程数量
如果不配置此项目,默认并发线程数是(ParallelGCThreads+3)/4
ParallelGCThreads
GC并行时使用的线程数量
-XX:CMSInitiatingOccupancyFraction
指定当老年代空间使用率真达到多少时,进行一次CMS垃圾回收
默认是68
大
降低CMS的触发频率
内存不足导致CMS回收失败,启动老年代串行收集器
小
避免频繁触发老年代串行收集器
+XX:+UseCMSCompactAtFullCollection
设定进行多少次CMS回收后,进行一次内存压缩
非并发
+XX:CMSClassUnloadingEnabled
如果条件允许,系统会用CMS的机制回收Perm区Class数据
G1
-XX:UseG!GC
打开G1收集器开关
-XX:MaxGCPauseMillis
指定目标最大停顿时间
G1调整新生代和老年代的比例、调整堆大小、调整晋升年龄等手段,试图达到预设目标
缩短
增加新生代GC的次数
老年代区域,在混合GC收集时,一次收集的区域数量会变少
增加进行FullGC的可能性
核心
-XX:ParallelGCThreads
设置并行回收时,GC的工作线程数量
核心
-XX:InitiatingHeapOccupancyPercent
指定当整个堆使用率达到多少时,触发并发标记周期的执行
默认值 45
为满足MaxGCPauseMillis
偏大
会导致并发周期迟迟得不到启动
Full GC可能性增加
偏小
并发周期非常频繁
大量GC线程抢占CPU
应用程序的性能有所下降
跟踪垃圾回收
-XX:+printGC
打印GC的简要信息
-XX:+PrintGCDetails
打印GC的详细信息,包括当前堆的各个区间的使用情况,下界,当前上界和上界
-XX:+PrintHeapAtGC
打印全面的堆信息
-XX:+PrintGCTimeStamps
GC发生的时间
-XX:+PrintGCApplicationConcurrentTime
应用程序的执行时间
-XX:+PrintGCApplicationStoppedTime
由于GC而产生的停顿时间
+XX:PrintReferenceGC
系统内的软引用、弱引用、虚引用和Finalize队列
-Xloggc:log/gc.log
将GC日志以文件的形式输出
类加载/卸载的跟踪
-XX:+TraceClassLoading
跟踪类的加载
-XX:TraceClassUnloading
跟踪类的卸载
-XX:+PrintClassHistogram
系统中类的分布情况
系统参数
-XX:+PrintCommandLineFlags
传递给虚拟机的显式和隐式参数
-XX:+PrintVMOptions
打印虚拟机接受到的命令行显式参数
-XX:+PrintFlagsFinal
打印所有的系统参数的值
方法区
JDK6
-XX:PermSize
永久区大小,默认64MB
-XX:MaxPermSize
最大永久区大小
JDK8
-XX:MaxMetaspaceSize
最大元数据区大小
直接内存
-XX:MaxDirectMemorySizee
最大可用直接内存