Java垃圾回收算法

标记清除算法


1.标记阶段:将所有对象标记(可达性分析可达目标)
2.清除阶段:从内存清除未标记对象
实现简单
缺点:碎片化,分配速度慢(因为碎片多,通过链表维护)


复制算法


1.准备from和to两部分空间,每次对象分配阶段只能使用一个(from)
2.将存活对象复制到to(可达性分析得到存活对象)
3清除from内容,互换名称
缺点:内存使用效率低
有点:吞吐量高,不会发生碎片化
性能不如标记清除算法


标记整理算法


1.标记阶段:将所有对象标记(可达性分析可达目标)
2.整理阶段:将对象全部移动到一端,清除其余空间
缺点:整理阶段的效率不高
优点:内存使用效率高,没有碎片化


分代GC(当前使用2023.12.18日)


将内存分为young和old两部分,old内存放存活时间较长对象,young分为eden区和survivor区,survivor区可分为两块此处代称s0,s1。
执行流程
1.创建的对象会放在eden区,当新创建的对象无法放入则触发Young GC会将eden中和from(s0)中需要回收的对象清除,把没有回收的对象放入to(s1)(复制算法)
每次出现搬运会给年龄加一,初始为0
2.当年级达到15时,会把对象放入old区
3.当old区空间不足时会先尝试Young GC,如果内存依然不够,会启动Full GC对整个堆垃圾回收(产生的stw较长)
4.如果内存依旧不足,则抛出异常OutOfMemory

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值