JVM性能调优

一、jvm参数设置

-XX:+PrintGCDetails:打印GC信息

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=d:/a.dump:如果发生了OOM异常,那就把dump信息导出到d:/a.dump文件中

-Xmx –Xms:指定最大堆和最小堆
-Xmn:设置新生代大小

-XX:PermSize:永久区初始大小

-XX:MaxPermSize:永久区最大空间

-Xss:栈空间大小设置

-XX:NewRatio:新生代(eden+2*s)和老年代(不包含永久区)的比值, 例如:4,表示新生代:老年代=1:4,即新生代占整个堆的1/5

-XX:SurvivorRatio(幸存代):设置两个Survivor区和eden的比值,例如:8,表示两个Survivor:eden=2:8,即一个Survivor占年轻代的1/10


二、堆的分配参数总结:

1.根据实际事情调整新生代和幸存代的大小
2.官方推荐新生代占堆的3/8,幸存代占新生代的1/10
3.在OOM时,记得Dump出堆,确保可以排查现场问题

4.新生代分配的空间不同,默认的-XX:SurvivorRatio也不一样,有1,6等值

5.适当减小幸存代大小,这样的话,能够减少GC的次数

 

三、永久区分配参数:

  •   

    设置永久区的初始空间和最大空间。也就是说,jvm启动时,永久区一开始就占用了PermSize大小的空间,如果空间还不够,可以继续扩展,但是不能超过MaxPermSize,否则会OOM。

    他们表示,一个系统可以容纳多少个类型,我们知道,使用CGLIB等库的时候,可能会产生大量的类,这些类,有可能撑爆永久区导致OOM。于是,我们运行下面这段代码:

posted on 2019-07-12 14:56  myf008  阅读(175)  评论(0编辑  收藏  举报

导航