简述java垃圾回收

什么是垃圾回收?

垃圾回收是指把没用的对象所占的内存释放,给其他对象使用。

怎么确定一个对象是否还有用?

一种算法是引用计数法,计数器为0对象没用,否则对象还在使用,这种方法的一个缺点;两个对象互相引用,则计数器永远不为0,也就无法释放内存。另一种算法是根搜索算法。从gc root对象出发,寻找引用的节点,当所有节点搜索完毕,没被引用的节点就是无用的节点。

几种常见的垃圾回收算法:

标记-清除算法:标记所有无用节点然后清除,实现起来比较容易,缺点容易产生内存碎片。

标记-整理算法:和标记清除算法类似,只是标记后先把存活对象向一端移动,然后再清除边界外的对象。

复制算法:内存分为两块,每次使用一块,满了之后将存活对象复制到另一块内存上。解决了内存碎片问题,缺点如果每次存留的对象多的话,内存开销大。

分代收集算法:根据对象的存活周期划分不同的内存区域。年轻代、年老代、持久代 年轻代copying算法,年老代标记-整理算法,持久代存放一些class 常量等。年轻代分为eden survivor0 survivor1,对象从Eden出生,发生minor gc时,Eden和survivor from的存活对象复制到survivor to区,清除eden 和survivor区,survivor存满或对象生命周期带到阈值会提升到年老代。年老代满时发生full gc.

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值