-XX:MaxTenuringThreshold=n 通过该参数可以设置存活对象在 survivor
spaces 之 间 复 制 的 次 数 , 超 过 这 个 次 数 , 对 象 就 被 移 到 tenured
generation。通过这个参数可以保持 tenured space 的稳定性,避免一些寿
命不是很长的对象占据该空间(当然,也可以适当增加 young generation
的大小,尽量让寿命不长的对象 die 在 young generation
);
-XX:MaxHeapFreeRatio=70,-XX:MinHeapFreeRatio=40 设置堆的最大/
最小空闲空间的比例,70%,40%
是默认值,可以避免堆空间频繁的伸缩;
-XX:+UseCMSCompactAtFullCollection
,
-
XX:CMSFullGCsBeforeCompaction=n
–
在
使
用
XX:
+UseConcMarkSweepGC 时 有 引 起 一 定 的 内 存 碎 片 问 题 , 可 以 通 过
UseCMSCompactAtFullCollection 在 full gc 之 后 进 行 压 缩 ,
CMSFullGCsBeforeCompaction=n 表示,在进行 n 次 full gc 之后进行压缩,
因为开始的一两次 full gc 引起的内存碎片可能并不是很多,这样可以减少压
缩次数,提高 gc
效率。
并发收集器(响应时间优先)
-XX:+UseParNewGC:设置年轻代为并发收集。可与 CMS 收集同时使用 。
JDK5.0 以上,JVM
会根据系统配置自行设置,所以无需再设置此值。
CMS,全称 Concurrent Low Pause Collector,是 jdk1.4 后期版本开始引
入的新 gc 算法,在 jdk5 和 jdk6 中得到了进一步改进,它的主要适合场景是
对响应时间的重要性需求大于对吞吐量的要求,能够承受垃圾回收线程和应
用线程共享处理器资源,并且应用中存在比较多的长生命周期的对象的应用 。
CMS 是用于对 tenured generation 的回收,也就是年老代的回收,目标是
尽量减少应用的暂停时间,减少 FullGC 发生的几率,利用和应用程序线程并
发的垃圾回收线程来标记清除年老代。
-XX:+UseConcMarkSweepGC:设置年老代为并发收集。测试中配置这个以
后,-XX:NewRatio=4 的配置失效了。所以,此时年轻代大小最好用-Xmn 设
置。
-XX:CMSFullGCsBeforeCompaction=:由于并发收集器不对内存空间进行
“
”
压缩、整理,所以运行一段时间以后会产生 碎片 ,使得运行效率降低。此参
数设置运行次 FullGC
以后对内存空间进行压缩、整理。
-XX:+UseCMSCompactAtFullCollection:打开对年老代的压缩。可能会影响
性能,但是可以消除内存碎片。
-XX:+CMSIncrementalMode:设置为增量收集模式。一般适用于单 CPU 情
况。
-XX:CMSInitiatingOccupancyFraction=70:表示年老代空间到 70%时就开
始执行 CMS
,确保年老代有足够的空间接纳来自年轻代的对象。
注:如果使用 throughput collector
和 concurrent low pause collector 这
两种垃圾收集器,需要适当的挺高内存大小,为多线程做准备。
其它
-XX:+ScavengeBeforeFullGC:新生代 GC 优先于 Full GC
执行。
-XX:-DisableExplicitGC:禁止调用 System.gc(),但 JVM 的 gc
仍然有效。
-XX:+MaxFDLimit
:最大化文件描述符的数量限制。