以下配置主要用于分代垃圾回收算法。
5. 1.堆大小设置
年轻一代的背景非常重要
JVM中的最大堆大小有三个限制:相关操作系统的数据模型(32-bt或64位);系统可用的虚拟内存;系统可用的物理内存。在32位系统中,通常限制为1. 5G〜2G; 64表示操作系统对内存没有限制。在Windows Server 2003系统中,在JDK 5. 0下测试的3. 5G物理内存,最大可以设置为1478m。
典型设置:
java-Xmx3550m -Xms3550m -Xmn2g–Xss128k
-Xmx3550m:将JVM的最大可用内存设置为3550M。
-Xms3550m:设置JVM以使内存3550m。可以将该值设置为与-Xmx相同,以避免在每个垃圾回收完成后JVM重新分配内存。
-Xmn2g:将年轻代大小设置为2G。整个堆大小=年轻代大小+老代大小+持久代大小。永久代通常具有64m的固定大小,因此在增加年轻代后,老一代的大小将减小。此值对系统性能有较大影响。 Sun正式建议配置整个堆的3/8。
-Xss128k:设置每个线程的堆栈大小。在JDK 5. 0之后,每个线程的堆栈大小为1M,之前的每个线程的堆栈大小为256K。调整应用程序线程所需的内存大小。在相同的物理内存下,减小此值可以生成更多的线程。但是,操作系统对进程中的线程数仍然有限制,并且不能无限期地生成它。经验值在3000〜5000左右。

java -Xmx3550m -Xms3550m -Xss128k-XX:NewRatio = 4 -XX:SurvivorRatio = 4 -XX:MaxPermSize = 16m -XX:MaxTenuringThreshold = 0
-XX:NewRatio = 4:设置年轻一代(包括伊甸园和两个幸存者区域)与老一代(不包括永久一代)的比率。设置为4,年轻一代与老一代的比例为1:4,而年轻一代占整个堆栈的1/5
-XX:SurvivorRatio = 4:设置年轻一代中伊甸园面积与幸存者面积之比。设置为4时,两个幸存者区域与一个伊甸园区域的比例为2:4,其中一个幸存者区域占整个年轻一代的1/6。
-XX:MaxPermSize = 16m:将永久代大小设置为16m。
-XX:MaxTenuringThreshold = 0:设置垃圾的最大使用期限。如果设置为0,则年轻代对象不会通过Survivor区域,而直接进入旧代。对于更老的应用程序,可以提高效率。如果将此值设置为较大的值,则将在“幸存者”区域中多次复制年轻一代对象,这会增加该对象在年轻一代中的生存时间,并增加在年轻一代中进行回收的一般理论。
5. 2.回收商选择
JVM提供了三种选择:串行收集器,并行收集器,并发收集器,但是串行收集器仅适用于小数据量,因此这里的选择主要针对并行收集器和并发收集器。默认情况下,JDK 5. 0以前曾经使用过串行收集器。如果要使用其他收集器,则需要在启动时添加相应的参数。在JDK 5. 0之后,JVM将根据当前系统配置进行判断。
具有吞吐量优先级的并行收集器
如上所述,并行收集器的主要目的是达到一定的吞吐量,适用于科学技术和后台处理。

典型配置:
java -Xmx3800m -Xms3800m -Xmn2g -Xss128k-XX:+ UseParallelGC -XX:ParallelGCThreads = 20
-XX:+ UseParallelGC:选择垃圾收集器作为并行收集器。此配置仅对年轻一代有效。也就是说,在上述配置下,年轻一代使用并发收集,而老一代仍然使用串行收集。
-XX:ParallelGCThreads = 20:配置并行收集器的线程数,即,同时一起垃圾收集了多少个线程。最好将该值配置为等于处理器数量。
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+ UseParallelGC -XX:ParallelGCThreads = 20-XX:+ UseParallelOldGC
-XX:+ UseParallelOldGC:将旧式垃圾收集方法配置为并行收集。 JDK 6. 0支持旧版本的并行收集。
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+ UseParallelGC-XX:MaxGCPauseMillis = 100
-XX:MaxGCPauseMillis = 100:设置每个年轻垃圾收集的最长时间。如果这个时间不能满足,JVM将自动调整年轻代的大小以达到该值。
n java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+ UseParallelGC -XX:MaxGCPauseMillis = 100-XX:+ UseAdaptiveSizePolicy

-XX:+ UseAdaptiveSizePolicy:设置此选项后,并行收集器将自动选择年轻代区域大小和相应的Survivor区域比率,以达到目标系统指定的最小对应时间或收集频率。建议使用此值以并行方式。收集器始终处于打开状态。
具有优先级响应时间的并发收集器
如上所述,并发收集器主要是为了确保系统的响应时间并减少垃圾收集期间的暂停时间。适用于应用服务器,电信领域等。
典型配置:
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:ParallelGCThreads = 20-XX:+ UseConcMarkSweepGC -XX:+ UseParNewGC
-XX:+ UseConcMarkSweepGC:将旧版本设置为并发收集。在测试中配置完此选项后,-XX:NewRatio = 4的配置由于未知原因而失败。因此,此时,最好使用-Xmn设置年轻一代的大小。
-XX:+ UseParNewGC:将年轻代设置为并行集合。可以与CMS收集同时使用。 JDK 5. 0及更高版本,JVM将根据系统配置进行设置,因此无需设置此值。
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+ UseConcMarkSweepGC-XX:CMSFullGCsBeforeCompaction = 5 -XX:+ UseCMSCompactAtFullCollection
-XX:CMSFullGCsBeforeCompaction:由于并发收集器不会压缩和组织内存空间,因此在运行一段时间后会产生“碎片”,这会降低运行效率。此值设置GC将运行多少次来压缩和整理内存空间。
-XX:+ UseCMSCompactAtFullCollection:打开旧版本的压缩。可能会影响性能,但可以消除碎片化
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-375757-1.html
#吴亦凡##挑战者吴亦凡#
保证国家安全
入台湾之日
防空