Java内存回收

可进行回收的内存有


回收之前需要判断内存是否可以被回收,主要有两种算法

(1)引用计数算法(非Java)


(2)根搜索算法(Java)


内存回收算法介绍

(1)标记-清除算法(非Java)

回收前状态


回收后状态


优点:实现简单,其他算法的基础
缺点:效率低;会产生内存碎片

(2)标记-整理算法(非Java)

回收前状态


回收后状态


优点:没有内存碎片,避免了对象存活率高时回收效率低
缺点:实现相对复杂,效率也不高,不仅要标记所有存活对象,还要整理所有存活对象的引用地址。从效率上来说,标记/整理算法要低于复制算法。

(3)复制算法(Java算法)

回收前状态


回收后状态


优点:实现简单,效率高,没有内存碎片
缺点:内存利用率低,对象存活率高时回收效率低

(4)分代收集算法(是对上面几种算法的使用)
新生代(Young):每次垃圾回收都发现有大量对象死去,只有少量对象存活,这样选用复制算法,花很小的成本就可以完成收集。
老年代(Old):对象存活率高、没有额外的空间对他就行分配担保,这是就必须使用“标记-清理”或者“标记-整理”。
方法区或持久代(perm):通常这个区域内存变化不大,但发生不够用时会产生回收动作。有些虚拟机没有这个区域的回收,虚拟机规范中没有强制规定需要实现他的回收。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值