java-----垃圾分代回收机制详解

java中对每一种类型都规定了具体的不可变的代销,所以所有的内存都是由JVM自动分配的,所有的内存的管理和回收都是由JVM自动进行的。对象的回收都是由垃圾收集器(GarbageCollwctor--GC)执行的。默认堆内存的使用率超过70%的时候,回启动GC。

栈内存的方法执行完后会自行出栈,方法区中的内存不回收,只有服务器关闭时才会回收,所以只有堆内存里面具有垃圾回收机制。

堆内存(heap space)结构如图所示:

 堆内存分为两大区域 新生代和 老生代,新生代又分为伊匍园区和幸存者区,幸存者区又分为from区和to区。

1.当在堆内存开辟了一个空间后,它首先会在伊匍园区进行一次扫描,若扫描不通过,它就被回收了,若若扫描通过则它会进入幸存者区,在幸存者区他会进行多次扫描,若多次扫描后它仍然存在,则它会进入老生代,老生代的扫描频率会远远小于新生代。

2.如果对象创建之后在伊匍园区放不下,则会触发第一次初代回收(在新生代中),如果回收之后还是放不下,则会触发第二次初代回收。如果第二次初代回收还是放不下,则会直接当入老生代。如果放入失败,则会触发第一次完全回收,对象会再次试图放入新生代,如果还是失败,则触发第三次初代回收,回收之后试图放入新生代,如果放入失败,则再次试图放入老生代,如果放入失败,则触发第二次完全回收,则对象再次试图放入新生代,如果放不下,则试图放入老生代,如果还是失败抛出OutOfMemoryError.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值