JVM的常见配置汇总java
堆设置:并发
-Xms:初始堆大小 通常设置为小于4Gide
-Xmx:最大堆大小 通常设置为小于4G工具
通常-Xms与Xmx的值相等,避免每次垃圾回收完成后JVM从新分配内存操作系统
-XX:NewSize=n 设置年轻代大小线程
-XX:NewRatio=n 设置年轻代和年老代的比值设计
若是设置了-XX:NewSize,那么久不在设置-XX:NewRatio递归
收集器的设置内存
-XX:+UseParallelGC:设置并行收集器资源
-XX:+UseConcMarkSweepGX:设置并发收集器
垃圾回收统计信息
-XX:+PrintGC
并行收集器设置:
-XX:ParallelGCThreads=n 根据CPU核数来设置。并行收集线程数
配置举例:
系统的可用武力内存限制:32位系统下,通常限制在1.5G-2G;
64位操做系统对内存无限制,可是通常设置在4G左右
典型设置:
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k
-Xmn2g:持久代通常固定大小为64m
回收器的选择:
JDK5.0之后,JVM会根据当前系统配置进行判断
使用并发收集器时,开启对年老代的
JVM调优工具:
Jconsole、VisualVM:JDK自带
持久代被占满:
异常:java.lang.OutOfMeoryError:PermGen Space
Perm空间被占满,没法为新的
解决办法:
1.-XX:MaxPermSize=16m
堆栈溢出
异常:java.lang.StackOverflowerror
说明:通常就是递归没返回,或者循环调用形成
线程堆栈满
异常:Fatal:Stack size too small
说明:java中一个线程的空间大小是有限制的。JDK5.0之后这个值是1M。与这个线程相关的数据将会保存其中。但当线程空间满了之后,会出现上面异常
解决:增长线程栈大小。-Xss2m。可是这个配置没法解决根本问题,还要看代码部分是否有形成泄漏的部分
系统内存被占满
异常:java.lang.OutOfMeoryError:unable to create new native thread
说明:这个异常是因为操做系统没有足够的资源来产生这个线程形成的。系统建立线程时,除了要在Java堆中分配内存外,操做系统自己也须要分配资源来建立线程。所以,当线程数量大道必定程度之后,堆中或许还有空间,可是操做系统分配不出资源来了,就出现这个异常了。
经过修改-Xss来减小分配给单个线程的空间,也能够增长系统总共内生产的线程数。
解决:
1.从新设计系统减小线程数量
2.经过-Xss改变大小
经常使用命令:
jmap head
jmap -permstat
jmap -dump