现在的位置: 首页 > 综合 > 正文

JVM调优

2018年05月20日 ⁄ 综合 ⁄ 共 981字 ⁄ 字号 评论关闭

JVM调优主要是指内存管理方面的调优,包括各个代的大小、GC策略等。

 1:代大小的调优

     最关键的参数为-Xms -Xmx -Xmn  -XX:SurvivorRatio -XX:MaxTenuringThreshold

   -Xms和-Xmx通常设置为相同的值,避免运行时要不断的扩展JVM的内存空间,这个值决定了JVM Heap所能使用的最大空间

  -Xmn决定了新生代(New Generation)空间的大小,新生代中Eden, S0和S1三个区域的比率可通过-XX:SurvivorRatio来控制

  -XX:MaxTenuringThreshold控制对象在经历多少次Minor GC后才能转入旧生代,通常将此值设置为新生代存活周期,此参数只有在

串行GC时有效。 

    1.1 避免新生代大小设置过小

      设置过小时,会产生两种比较明显的现象,一是Minor GC的次数更加频繁,而是有可能导致Minor GC对象直接进入旧生代,此时

 进入旧生代的对象占据了旧生代剩余空间,则触发Full Gc。

     当MinorGc 过于频繁,或发现经常出现Minor GC时,Survivor的一个区域空间满,且Old Gen增长超过了Survivor区域大小时,就需要

考虑新生代的调整了,调整时的原则是在不能调大JVM Heap的情况下,尽可能放大新生代空间,尽量让对象在Minor Gc阶段被回收,

但新生代空间也不可过大,在能够调大JVM Heap的情况下,则可以按照增加的新生代空间大小增加JVM Heap的大小,以保证旧生代够用。

   1.2 避免新生代设置过大

     大多数场景下都应该设置的比旧生代小,通常推荐的比例是新生代占JVM Heap区大小的33%左右。

   1.3 避免Survivor区过小或者过大

      在无法调整JVM以及新生代的大小时,合理调整Survivor区的大小也能带来一些效果。调大SurvivorRatio值意味着Eden区域变大,minor gc

  的触发次数会降低,但此时Survivor区域的空间变小了,如有超过Survivor空间大小的对象在minor gc后仍没有被回收,则会直接进入旧生代;

调小SurvivorRatio则意味着Eden区域变小,minor gc的触发次数会增加,Survivor区域变大,意味着可以存储更多在minor gc后仍存活的对象,

避免进入旧生代。

  

抱歉!评论已关闭.