(分代)垃圾回收的过程

 分代回收器有两个分区:

老生代和新生代,新生代默认的空间占比总空间的 1/3,老生代的默认占比是 2/3。

新生代使用的是复制算法,新生代里有 3 个分区:Eden、To Survivor、From Survivor,它们的默认占 比是 8:1:1,它的执行流程如下: 当年轻代中的Eden区分配满的时候,就会触发年轻代的GC(Minor GC)。

具体过程如下:

1、在Eden区执行了第一次GC之后,存活的对象会被移动到其中一个Survivor分区(以下简称from)

2、Eden区再次GC,这时会采用复制算法,将Eden和from区一起清理。存活的对象会被复制到to 区。接下来,只需要清空from区就可以了

对象是怎么从年轻代进入老年代的

这是老掉牙的题目了。在下面四种情况下,对象会从年轻代进入老年代。 1、如果对象够老,会通过提升(Promotion)进入老年代,这一般是根据对象的年龄进行判断的。

2、动态对象年龄判定。有的垃圾回收算法,比如G1,并不要求age必须达到15才能晋升到老年代,它 会使用一些动态的计算方法。

3、分配担保。当 Survivor 空间不够的时候,就需要依赖其他内存(指老年代)进行分配担保。这个时候, 对象也会直接在老年代上分配。

4、超出某个大小的对象将直接在老年代分配。不过这个值默认为0,意思是全部首选Eden区进行分配。

 

. 新生代、老年代、持久代都存储哪些东西

1、新生代:

 1.方法中new一个对象,就会先进入新生代。

2、老年代:

1. 新生代中经历了N次垃圾回收仍然存活的对象就会被放到老年代中。

2. 大对象一般直接放入老年代。

3. 当Survivor空间不足。需要老年代担保一些空间,也会将对象放入老年代。

3、永久代: 指的就是方法区。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值