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:设置每次年轻代垃圾回收的最长时间(单位毫秒),如果