码迷,mamicode.com
首页 > 其他好文 > 详细

JDK8 GC 分代垃圾回收之 内存分配

时间:2018-02-11 16:16:19      阅读:1069      评论:0      收藏:0      [点我收藏+]

标签:bsp   pos   其他   jdk8   jdk   mem   年龄   允许   nfa   

Eden ——> Survivor(From ——> To) ——> Old 

1、先在Eden区给新对象分配空间(大对象,很长的字符串、数组。直接分配在Old区),Eden区没有足够的空间分配时 ——> YGC;

GC开始时,Eden区对象全部进入To Surivor区,From Survivor中的对象年龄超过阈值(15,每次未回收标志加一)的对象进入Old区,

如果Survivor区中某一年龄的对象 >= Survivor区的一半,那么 >= 该年龄的对象直接进入Old区。

2、其他进入To Survivor区。然后,Eden 区, From Survivor区清空。From Survivor , To Survivor角色互换;

3、如果To Survivor区没有足够空间容纳Eden,From Survivor中的对象,需要Old区分配担保,分配到Old区中。如果Old区分配空间不够,Out memory。

 

Old区分配担保:

Minor GC之前,检查Old 最大可用连续空间是否大于新生代所有对象总空间:

大于,Minor GC安全;

否则,虚拟机查看HandlePromotionFailure 设置值是否允许担保失败:

允许,继续检查Old区最大可用的连续空间是否大于历次晋升到Old区对象的平均大小:

  大于,尝试 Minor GC,尽管存在风险。

  小于,或者不允许担保失败,则进行 Full GC。

 

JDK8 元空间替换了永久区,字符串,方法可以直接分配在内存中,避免 插入 永久区大小,Perm out memory。

JDK8 GC 分代垃圾回收之 内存分配

标签:bsp   pos   其他   jdk8   jdk   mem   年龄   允许   nfa   

原文地址:https://www.cnblogs.com/codegod/p/8440895.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!