JVM-内存分配和回收策略

    1.对象优先在Eden分配,Eden内存不足,将触发一次minor gc

    2.大对象直接进入老年代

      可通过设置-XX:PretenureSizeThreshold ,当对象大于这个值,直接分配到老年代(新生代使用的是复制算法,大对象分配到新生代将会触发频繁的复制)

    3.长期存活的对象将进入老年代

      新生代中每经过一次minor gc还存活的对象,年龄+1,通过设置-XX:MaxTenuringThreshold,默为15,当对象的年龄到达设置年龄时,这些对象将被移进老年代

    4.动态年龄判定

      如果Survior空间中相同年龄的所有对象的大小,大于Survior一半的空间,那么年龄大于或等于该年龄的对象直接进入老年代,无需年龄达到PretenureSizeThreshold

    5.空间分配担保

      在minor gc 发生之前,虚拟机会先检查老年代的最大可用连续空间是否大于新生代所有对象总空间,如果条件成立,那么minor gc可以确保是安全的。

      如果条件不成立,将查看HandlePromotionFailure设置值是否允许担保失败。如果允许,那么继续检查老年代最大可用的连续空间,是否大于晋身到老年代对象的平均水平。
      如果大于,将进行一次minor gc(尽管有一定风险),如果小于或者HandlePromotionFailure设置为不允许担保,将进行一次FullGc.

      

    

      

猜你喜欢

转载自www.cnblogs.com/eason-ou/p/12195622.html