JVM优化之-Xss-Xms-Xmx-Xmn参数设置
Xmn Xms Xmx Xss有什么区别?
Xmn、Xms、Xmx、Xss都是JVM对内存的配置参数,我们可以根据不同需要区修改这些参数,以达到运⾏程序的最好效果。
-Xms 堆内存的初始⼤⼩,默认为物理内存的1/64
-Xmx 堆内存的最⼤⼤⼩,默认为物理内存的1/4
-Xmn 堆内新⽣代的⼤⼩。通过这个值也可以得到⽼⽣代的⼤⼩:-Xmx减去-Xmn
-Xss 设置每个线程可使⽤的内存⼤⼩,即栈的⼤⼩。在相同物理内存下,减⼩这个值能⽣成更多的线程,当然操作系统对⼀个进程内的线程数还是有限制的,不能⽆限⽣成。线程栈的⼤⼩是个双刃剑,如果设置过⼩,可能会出现栈溢出,特别是在该线程内有递归、⼤的循环时出现溢出的可能性更⼤,如果该值设置过⼤,就有影响到创建栈的数量,如果是多线程的应⽤,就会出现内存溢出的错误。除了这些配
置,JVM还有⾮常多的配置,常⽤的如下:
1. 堆设置
-Xms:初始堆⼤⼩
-Xmx:最⼤堆⼤⼩
-Xmn:新⽣代⼤⼩
-XX:NewRatio:设置新⽣代和⽼年代的⽐值。
如:为3,表⽰年轻代与⽼年代⽐值为1:3
-XX:SurvivorRatio:新⽣代中Eden区与两个Survivor区的⽐值。注意Survivor区有两个。
如:为3,表⽰Eden:Survivor=3:2,⼀个Survivor区占整个新⽣代的1/5
-XX:MaxTenuringThreshold:设置转⼊⽼年代的存活次数。如果是0,则直接跳过新⽣代进⼊⽼年代
-XX:PermSize、-XX:MaxPermSize:分别设置永久代最⼩⼤⼩与最⼤⼤⼩(Java8以前)
-XX:MetaspaceSize、-XX:MaxMetaspaceSize:分别设置元空间最⼩⼤⼩与最⼤⼤⼩(Java8以后)
2. 收集器设置
jvm调优参数-
XX:+UseSerialGC:设置串⾏收集器
-XX:+UseParallelGC:设置并⾏收集器
-XX:+UseParalledlOldGC:设置并⾏⽼年代收集器
-XX:+UseConcMarkSweepGC:设置并发收集器
3. 垃圾回收统计信息
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:filename
4. 并⾏收集器设置
-XX:ParallelGCThreads=n:设置并⾏收集器收集时使⽤的CPU数。并⾏收集线程数。
-
XX:MaxGCPauseMillis=n:设置并⾏收集最⼤暂停时间
-XX:GCTimeRatio=n:设置垃圾回收时间占程序运⾏时间的百分⽐。公式为1/(1+n)
5. 并发收集器设置
-XX:+CMSIncrementalMode:设置为增量模式。适⽤于单CPU情况。
-XX:ParallelGCThreads=n:设置并发收集器新⽣代收集⽅式为并⾏收集时,使⽤的CPU数。并⾏收集线程数。
各区域分配⽐例
新⽣代 ( Young ) 与⽼年代 ( Old ) 的⽐例的值为 1:2 ( 该值可以通过参数 –XX:NewRatio 来指定 )
默认的,Eden : from : to = 8 : 1 : 1 ( 可以通过参数 –XX:SurvivorRatio 来设定 ),即: Eden = 8/10 的新⽣代空间⼤⼩,from = to = 1/10 的新⽣代空间⼤⼩。