JVM GC算法

JVM GC

是什么:

​ GC:Garbage Collection(垃圾回收),是jvm中的一种术语。

GC分类:

		+ 轻GC:当Eden区或者幸存区满的时候就会进行轻GC, 清理新生区
		+ 重GC(Full GC): 当老年区满的时候,就会进行重GC, 清理全局

GC算法

1、复制算法

	### 用堆模型图讲解:

在这里插入图片描述

1、新生成的对象会先到达Eden区,当Eden区满的时候,就会启动GC, 一部分对象被当成垃圾回收掉内存,另一部分幸存下来,移动至to区, 此时Eden区是空的, from 区可能都有数据 , 如果有就把from区的对象复制到to区清空from区from区和to区对换, 使得永久保持to区是空的。

2、如此运行,假设有一部分对象经历了15次GC依然没有死亡, 那么就会进入养老区。

复制算法优缺点;

优点
  • 因为每一次GC都会把对象移动到一个幸存区中,所以就没有碎片内存
缺点:
  • 因为to区要始终保持空的,这部分内存就不能用于存储,所以浪费了内存

  • 复制需要一定的资源开销。

使用场景:

​ 当对象存活率很低的时候,空间中的对象就会比较少,此时复制算法的缺点就会被缩小,此时使用合适

2、引用计数法

原理:

在这里插入图片描述

如图,为堆中的每个对象分别添加计数器, 用来标记此对象的引用数量,如对象A有多少个引用,对象B有多少个引用, 对象C的计数器为0,代表没有引用指向这个对象 , 这个就是垃圾,当计数器数值减到0,就会立刻被回收。

优缺点:

优点:

当计数器减到0,就会立刻清理回收

缺点;

程序计数器本身就会占据一定的空间, 而且每一次更新指针,就会对计数器进行加减操作,频繁的操作就会增系统的开销。

3、标记清除算法:

原理:

  • 对堆进行扫描, 标记存活的对象,图中有颜色的即为标记的对象

在这里插入图片描述

  • 再次扫描堆,清除没有标记的对象,图中虚线对象为被清除的对象

在这里插入图片描述

  • 清除完毕

优缺点:

优点:

​ 没有浪费额外的内存空间。

缺点;

​ 两次扫描,浪费了大量时间。

​ 产生了碎片内存。

4、标记压缩算法:

原理:

​ 在标记算法的基础上再增加一次扫描,用来压缩空间, 消除碎片内存

在这里插入图片描述

优缺点;

优点:

​ 消除了内存碎片

缺点:

​ 又增加了一次扫描,加大了时间成本, 同是数据在内存里的压缩移动,也需要消耗一定的资源。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值