background image

-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

 

:最大化文件描述符的数量限制。