内存相关设置
-Xms:初始堆(Heap)大小
-Xmx:最大堆(Heap)大小
-Xmn:堆里面young区的大小新生代大小,Oracle建议设置为整个堆大小的1/4到1/2。
-Xss:设置每个线程栈的大小。Java1.5 以后每个线程栈默认大小为1M,之前每个线程栈默认大小为256K。可以根据应用的线程所需内存大小进行调整。一般情况下默认值已经能满足绝大部分情景的应用,如果想更进一步优化则需要非常细致的测试。在相同物理内存下,减小这个值能生成更多的线程,进程中可容纳线程数量与很多因素有关,感兴趣的可以详细了解下,据说可以达到6500个以上。
-XX:MinHeapFreeRatio=40:如果发现空闲堆内存占到整个预估上限值的40%,则增大上限值。
-XX:MaxHeapFreeRatio=70:如果发现空闲堆内存占到整个预估上限值的70%,则收缩预估上限值。
-XX:NewRatio=2:设置年轻代和老年代的比值。例如:n=3,则表示年轻代与老年代比值为1:3,年轻代占整个年轻代与老年代之和的1/4。
-XX:SurvivorRatio=8:Eden 与Survivor 的占用比例。例如8表示,一个survivor 区占用 1/8 的Eden 内存,即1/10的新生代内存,此处需注意年轻代有2个survivor 区,所以比例为1:10。
-XX:TargetSurvivorRatio=50:实际使用的survivor 空间大小占比。默认是47%,最高90%。
-XX:MaxPermSize=64m:设置持久代(即方法区)占整个堆内存的最大值。
-XX:MaxTenuringThreshold=0:设置对象最大年龄。即对象在在Eden 与Survivor 区之间被复制的次数,每被复制一次就增加1岁,默认值为15。如果设置为0的话,则Eden 中对象不经过Survivor 区直接进入老年代。
收集器设置
-XX:-DisableExplicitGC:禁止在运行期显式地调用System.gc(),开启该选项后,GC 的触发时机将由Garbage Collector 全权掌控,默认:关闭。
-XX:+ScavengeBeforeFullGC:在Full GC前触发一次Minor GC,默认:启用。
-XX:+UseGCOverheadLimit:限制GC的运行时间。如果GC耗时过长,就抛OutOfMemoryError。
-XX:ParallelGCThreads=n:配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。此值最好配置与处理器数目相等。
-XX:+UseTLAB:启用线程本地缓存区(Thread Local)。
-XX:+UseSerialGC:使用串行收集器。
-XX:+UseParallelGC:使用并行收集器。
-XX:+UseParallelOldGC:使用并行压缩收集器。
-XX:+UseConcMarkSweepGC:使用CMS 收集器。
-XX:+UseCMSCompactAtFullCollection:使用并发收集器时,开启对年老代的压缩.
-XX:CMSFullGCsBeforeCompaction=0:上面配置开启的情况下,这里设置多少次Full GC后,对年老代进行压缩
G1收集器设置
-XX:+UseG1GC:使用G1收集器。
-XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间,这是一个理想目标,JVM 将尽最大努力来实现它。
GC 日志设置
-XX:+PrintGC:开启GC日志打印。
-XX:+PrintGCDetails:打印GC回收的详细信息。
-XX:+PrintGCTimeStamps:打印GC停顿耗时。
-Xloggc:<filename>:输出GC 详细日志信息至指定文件。
-XX:+UseGCLogFileRotation:开启GC 日志文件切分功能,前置选项 -Xloggc。
-XX:NumberOfGClogFiles=1:设置切分GC 日志文件数量,文件命名格式:.0, .1, ..., .n-1。
-XX:GCLogFileSize=8K:GC日志文件切分大小。
在HotSpot JVM 中有三种概念,分别代表了不同代中发生的GC 动作。
Minor GC:指发生在新生代的垃圾收集动作,由于新生代中对象生命周期较短,更新速度迅速,所以Minor GC 也会比较频繁,Minor GC 的回收速度也比较快。Minor GC 通常使用copying 算法,此算法一般为最有效的。
Major GC:指发生在老年代或永久代的垃圾收集动作,出现了Major GC,通常会伴随至少一次的 Minor GC(但有的收集策略会只有Major GC)。MajorGC 的速度一般会比比较慢。
Full GC:指对堆内存整体进行垃圾收集(包含新生代,老年代,永久代),有时可以理解为仅是Major GC,又可以理解为Major GC + Minor GC,因为概念理解上的差异我们理解Full GC 为清理所有内存即可。
时过境迁,其中也许有的分区都不在了,上面仅供参考吧。