Java 虚拟机
虚拟机调优
Java 虚拟机调优参数
-Xms起始内存 JVM堆内存-Xmx最大内存 JVM堆内存-Xmn新生代内存-Xss栈大小。 就是创建线程后,分配给每一个线程的大小-XX:NewRatio设置年轻代和老年代的比值。默认为2:1。如果为3,表示年轻代与老年代的比值为1:3,年轻代占整个年轻代和老年代的1/4。-XX:SurvivorRatio年轻代中Eden区和两个Survivor区的比值。如果为3,表示Eden:Survivor = 3:2, 因为有两个Survivor区域,所以一个Survivor区占整个年轻代的1/5.-XX:MaxPermSize设置持久代的大小。
收集器的设置
-XX:+UseSerialGC设置串行收集器-XX:+UseParallelGC设置并行收集器-XX:+UseParallelOld设置并行老年代收集器-XX:+UseConcMarkSweepGC设置并发收集器
垃圾回收统计信息
-XX:PrintGC-XX:PrintGCDetails-XX:PrintGCTimeStamps-Xloggc:filename
并行收集器设置
-XX:ParallelGCThreads=n设置并行收集器收集时使用的CPU数。并行收集线程数。-XX:MaxGCPauseMillis=n设置并行收集最大暂停时间-XX:GCTimeRatio=n设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)
并发收集器设置
XX:+CMSIncrementalMode设置为增量模式。适用于单CPU情况。XX:ParallelGCThreads=n设置并发收集器年轻代收集方式为并行收集时,使用的CPU数。并行收集线程数。
-Xms1G -Xmx2G -Xmn500M -XX:MaxPermSize=64M -XX:+UseConcMarkSweepGC -XX:SurvivorRatio=3
-Xms1GJVM初始内存1G 这一部分是不是应该是堆内存-Xmx2GJVM最大内存 2G-Xmn500M新生代内存 500M-XX:MaxPermSize持久代内存 64M-XX:SurvivorRatio=3新生代中Eden:Servivor = 3:2
JVM 调优
-Xms2G-Xmx2G将JVM最大内存与初始内存设置相等,避免JVM垃圾回收后重新分配内存。-Xmn1G年轻代内存Sun官方推荐配置为整个堆的3/8,通常设置为1/3或1/4。-Xss256K减小每条线程栈的大小,能生成更多的线程-XX:NewRatio=4调整年轻代与老年代的比例 年轻代:老年代=1:4-XX:MaxTenuringThreshold=0设置晋升到老年代的对象的年龄。 如果设置为0,则年轻代对象不经过Survivor区,直接进入老年代。如果设置一个较大的值,则年轻代对象会在Survivor区进行多次复制。-XX:+UseConcMarkSweepGCJVM在server模式下默认使用PararrelScavenge+SerialOld的收集器组合进行内存回收,不支持与用户线程并发执行。可使用ParNew+CMS+SerialOld的收集器组合进行内存回收(SerialOld收集器做为CMS收集器出现ConcurrentModeFailure失败后的后备收集器使用),减少stop-the-world时间。-XX:CMSFullGCsBeforeCompaction使用CMS时,设置CMS收集器在进行若干次垃圾收集后再启动一次内存碎片