@@内存调优@@
#初始堆大小 最大堆大小
-Xms(-XX:InitialHeapSize)
#最大堆大小
-Xmx (-XX:MaxHeapSize)
#让JVM在发生内存溢出时自动的生成堆内存快照
-XX:+HeapDumpOnOutOfMemoryError
#内存溢出时 存放路径
#默认情况下,保存在JVM的启动目录下名为java_pid<pid>.hprof 的文件里
-XX:HeapDumpPath
#当内存溢出发生时执行操作
-XX:OnOutOfMemoryError ="sh ~/cleanup.sh"
#设置持久代大小
-XX:PermSize
#设置持久代最大值
-XX:MaxPermSize
@@新生代垃圾回收@@
#指定新生代大小
-XX:NewSize and -XX:MaxNewSize
#设置新生代和老年代的相对大小
-XX:NewRatio
#-XX:NewRatio=3 指定老年代/新生代为3/1. 老年代占堆大小的 3/4 ,新生代占 1/4 .
#-XX:SurvivorRatio 指定伊甸园区(Eden)与幸存区大小比例
XX:SurvivorRatio=10
表示伊甸园区(Eden)是幸存区To大小的10倍(也是幸存区From的10倍) 伊甸园区(Eden)占新生代大小的10/12
#指定JVM 在每次新生代GC时,输出幸存区中对象的年龄分布
-XX:+PrintTenuringDistribution
#指定JVM 在每次新生代GC时,输出幸存区中对象的年龄分布。
-XX:+PrintTenuringDistribution
#设定老年代阀值 幸存区空间目标使用率
XX:MaxTenuringThreshold=10
-XX:TargetSurvivorRatio=90
设定老年代阀值的上限为10,幸存区空间目标使用率为90%。
@@吞吐量收集器@@
#该标志来激活串行垃圾收集器
-XX:+UseSerialGC
#选择垃圾收集器为并行收集器 [关注吞吐量]
-XX:+UseParallelGC
#选择垃圾收集器为并行收集器 [老年代 优于-XX:+UseParallelGC]
-XX:+UseParallelOldGC
吞吐量为垃圾回收时间与非垃圾回收时间的比值
#-XX:GCTimeRatio=<N>来设定,公式为1/(1+N)
-XX:GCTimeRatio=<value>
最大暂停时间(具有优先级)
-XX:MaxGCPauseMillis
@@CMS收集器@@
HotSpot JVM的并发标记清理收集器(CMS收集器)的主要目标就是:低应用停顿时间。
CMS收集器为老年代垃圾回收提供了几乎完全并发的解决方案,年轻代仍然通过“stop-the-world”方法来进行收集
会面临两个主要的挑战,需调优:
1 堆碎片
-- Full GC 处理
2 对象分配率高
-- 老年代将没有足够的可用空间来容纳一个从年轻代提升过来的对象。
-- 称为“并发模式失败”,并且JVM会执行堆碎片整理:触发Full GC。
#激活CMS收集器
-XX:+UseConcMarkSweepGC
#该标志激活年轻代使用多线程并行执行垃圾回收
-XX:UseParNewGC
[对于CMS收集器,年轻代GC算法和老年代GC算法是不同的]
#以多线程执行并发CMS
-XX:+CMSConcurrentMTEnabled
#定义并发CMS过程的线程数(需在生产或压测环境下 根据情况调优)
-XX:ConcGCThreads=<value>
#value=4意味着CMS周期的所有阶段都以4个线程来执行。
#默认 ConcGCThreads = (ParallelGCThreads + 3)/4
#老年代堆空间的使用率
-XX:CMSInitiatingOccupancyFraction
eg value=75意味着第一次CMS垃圾收集会在老年代被占用75%时被触发。
#收集器的增量模式(慎用)
-XX:+CMSIncrementalMode
增量模式经常暂停CMS过程,以便对应用程序线程作出完全的让步。因此,收集器将花更长的时间完成整个收集周期。
通过测试后发现正常CMS周期对应用程序线程干扰太大时,才应该使用增量模式。
#永久代也被包括进CMS垃圾回收
XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses
保证当有系统GC调用时,永久代也被包括进CMS垃圾回收的范围内。
@@GC日志@@
#开启了简单GC日志模式
-XX:+PrintGC
无法从日志中判断是否GC将一些对象从young generation移到了old generation
#开启了详细GC日志模式
-XX:PrintGCDetails
#将时间和日期也加到GC日志中
-XX:+PrintGCTimeStamps
-XX:+PrintGCDateStamps
#缺省的GC日志时输出到终端的,使用-Xloggc:也可以输出到指定的文件
-Xloggc