Java中垃圾回收是什么?为什么要有垃圾回收?垃圾回收是指回收什么数据?

  1. 常见的垃圾回收算法有哪些?分别是怎么进行回收的?各种垃圾回收算法适用于哪些场景?

标记清除算法

先暂停整个程序的全部运行线程,让回收线程以单线程进行扫描标记,并进行直接清除回收,然后回收完成后,恢复运行线程。标记清除后会产生大量不连续的内存碎片,造成空间浪费。

标记整理算法

和 标记清除 相似,不同的是,回收期间同时会将保留的存储对象搬运汇集到连续的内存空间,从而集成空闲空间。

复制回收算法

将可用内存分为大小相等的两份,在同一时刻只使用其中的一份。当这一份内存使用完了,就将还存活的对象复制到另一份上,然后将这一份上的内存清空。复制算法能有效避免内存碎片,但是算法需要将内存一分为二,导致内存使用率大大降低。

优点:简单,高效。

分代回收

在 JVM 中不同的对象拥有不同的生命周期,因此对于不同生命周期的对象也可以采用不同的垃圾回收算法,以提高效率,这就是分代回收算法的核心思想。

各种垃圾回收算法的适用场景

我们了解了三种垃圾回收算法后会发现,没有一个算法是完美,每种算法都有自己的特点,都有自己适用的场景。

标记清除法适用场景

1、只有小部分对象需要进行回收的,因为回收对象太多,其清除的时间就会越长。

2、关注停顿时间,对用户线程停顿时间有要求。

标记复制法适用场景

1、大部分对象都是需要进行回收只有少量对象存活的,因为需要把存活对象复制到新的内存区域,所需要复制的对象越多那么其复制的时间就会越长。

标记整理法适用场景

1、只有小部分对象需要进行回收的,因为标记整理法也需要清除掉回收对象,回收对象多其清除的时间就会越长。

2、关注吞吐量。

我们根据我们JVM内存结构分区会发现,标记清除法、标记整理法是适用于老年代的垃圾回收,因为老年代的对象一般都是存活的比较多, 而标记复制法则适用于我们的新生代的垃圾回收,因为新生代大多数的对象都是朝生夕死的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值