background image

  如何调优 JVM - 优化 Java 虚拟机(大全+

 

 

实例) 收藏

堆设置
-Xmx3550m:设置 JVM

 

最大堆内存 为 3550M  

-Xms3550m:设置 JVM

 

初始堆内存 为 3550M。此值可以设置与-Xmx 相同,以避免每

次垃圾回收完成后 JVM

 

重新分配内存。

-Xss128k

 

:设置每个线程的栈 大小。JDK5.0 以后每个线程栈大小为 1M,之前每个线

程栈大小为 256K。应当根据应用的线程所需内存大小进行调整。在相同物理内存下,

减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不

能无限生成,经验值在 3000~5000

 

左右。

-Xmn2g

 

:设置堆内存年轻代 大小为 2G

 

。整个堆内存大小 = 

 

年轻代大小 + 年老代大小 

 

持久代大小 。持久代一般固定大小为 64m,所以增大年轻代后,将会减小年老代大

小。此值对系统性能影响较大,Sun 官方推荐配置为整个堆的 3/8  

-XX:PermSize=256M

 

:设置堆内存持久代 初始值为 256M。(貌似是 Eclipse 等 IDE 的

初始化参数) 

-XX:MaxNewSize=size

 

:新生成的对象能占用内存的最大值。

-XX:MaxPermSize=512M:设置持久代最大值为 512M  

-XX:NewRatio=4:设置堆内存年轻代(包括 Eden 和两个 Survivor 区)与堆内存年老

 

代的比值(除去持久代) 。设置为 4,则年轻代所占与年老代所占的比值为 1:4  

-XX:SurvivorRatio=4:设置堆内存年轻代中 Eden 区与 Survivor

 

区大小的比值 。设置

为 4,则两个 Survivor 区(JVM 堆内存年轻代中默认有 2 个 Survivor 区)与一个 Eden

区的比值为 2:4,一个 Survivor 区占整个年轻代的 1/6  

-XX:MaxTenuringThreshold=7:表示一个对象如果在救助空间(Survivor 区)移动 7

 

次还没有被回收就放入年老代。
如果设置为 0 的话,则年轻代对象不经过 Survivor 区,直接进入年老代,对于年老代比

 

较多的应用,这样做可以提高效率。
如果将此值设置为一个较大值,则年轻代对象会在 Survivor 区进行多次复制,这样可以

 

增加对象在年轻代存活时间,增加对象在年轻代即被回收的概率。
回收器选择
JVM 给了三种选择:串行收集器、并行收集器、并发收集器,但是串行收集器只适用于

小数据量的情况,所以这里的选择主要针对并行收集器和并发收集器。

默认情况下,JDK5.0 以前都是使用串行收集器,如果想使用其他收集器需要在启动时加

入相应参数。JDK5.0 以后,JVM 会根据当前系统配置进行智能判断。

串行收集器
-XX:+UseSerialGC

 

:设置串行收集器

并行收集器(吞吐量优先)
-XX:+UseParallelGC:选择垃圾收集器为并行收集器。此配置仅对年轻代有效。即上述

 

配置下,年轻代使用并发收集,而年老代仍旧使用串行收集。
-XX:ParallelGCThreads=20:配置并行收集器的线程数,即:同时多少个线程一起进

 

行垃圾回收。此值最好配置与处理器数目相等。
-XX:+UseParallelOldGC:配置年老代垃圾收集方式为并行收集。JDK6.0 支持对年老

 

代并行收集。
-XX:MaxGCPauseMillis=100:设置每次年轻代垃圾回收的最长时间(单位毫秒),如

果无法满足此时间,JVM

 

会自动调整年轻代大小,以满足此值。

-XX:+UseAdaptiveSizePolicy:设置此选项后,并行收集器会自动选择年轻代区大小

和相应的 Survivor

 

区比例,以达到目标系统规定的最低响应时间或者收集频率等。

 

此参数建议使用并行收集器时,一直打开。

并发收集器(响应时间优先)
-XX:+UseParNewGC:设置年轻代为并发收集。可与 CMS 收集同时使用。JDK5.0 以

上,JVM

 

会根据系统配置自行设置,所以无需再设置此值。

CMS,全称 Concurrent Low Pause Collector,是 jdk1.4 后期版本开始引入的新 gc

算法,在 jdk5 和 jdk6 中得到了进一步改进,它的主要适合场景是对响应时间的重要性

需求大于对吞吐量的要求,能够承受垃圾回收线程和应用线程共享处理器资源,并且应

用中存在比较多的长生命周期的对象的应用。CMS 是用于对 tenured generation 的回