JVM虚拟机-垃圾回收(垃圾回收器、垃圾回收算法、分代回收、四大引用)

在这里插入图片描述

一、对象什么时候可以被垃圾器回收

(1)垃圾回收介绍

垃圾回收主要指的是堆中的对象,而堆作为一个共享的区域,存储着我们创建的对象与数组。但是并不能无限地去创建对象或是让所有对象都永久存在,如果不进行垃圾回收那么就会导致内存被耗尽。
在这里插入图片描述

(2)引用计数法

在这里插入图片描述
在这里插入图片描述
即便此时a与b都被赋值为了null,栈中对象与堆中数据不再有关联,但是因为堆中他们的数据是互相循环引用的,那么此时他们的ref仍会等于1,而并不会变为0,这两个对象也就一直都不会被回收,也就容易导致内存泄露,一般也就不会用其来定位对象是否为垃圾。

(3)可达性分析算法

在这里插入图片描述
在这里插入图片描述

(4)总结

在这里插入图片描述

二、JVM垃圾回收算法有哪些

在这里插入图片描述

(1)标记清除算法

在这里插入图片描述
数组也是存储到堆当中,并且数组存储的必须是一个连续的内存空间,如果使用了标记清除算法,由于内存不连续,也就可能没有办法再去存储新的数组对象了(或者是存储一个比较大的数组)。

(2)标记整理算法

在这里插入图片描述

(3)复制算法

在这里插入图片描述

(4)总结

在这里插入图片描述

三、分代回收

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
暂停时间短说明内存回收的效率较高。
在FullGC会一下子清空新生代与老年代区域的所有内存,这种应该尽量避免,一般发生在新生代和老年代内存严重不足的时候。

总结:

在这里插入图片描述

四、JVM中有哪些垃圾回收器

在这里插入图片描述

(1)串行垃圾回收器

在这里插入图片描述

(2)并行垃圾回收器

在这里插入图片描述

(3)CMS(并发)垃圾回收器

在这里插入图片描述
这个标记就是之前讲过的可达性分析算法来标记哪些对象是存活的对象

(4)总结

在这里插入图片描述

五、G1垃圾回收器

(1)介绍

在这里插入图片描述

(2)工作流程

①年轻代垃圾回收
  1. 第一次回收
    首先我们把整个堆划分成了大小相等的区域,每个区域都可以作为我们刚才提到的伊甸园Eden、幸存者Survivor、老年代old。
    伊甸园Eden在整个堆内存中的占比大约是5%~6%,当超过这个阈值时就会触发垃圾回收。
    在这里插入图片描述
  2. 第二次回收
    在这里插入图片描述
②并发标记

在进行并发标记时无STW,而在并发标记后的重新标记阶段就有STW。
在这里插入图片描述
暂停时间目标指的是一个预期的暂停时间,可以人为进行设定,代表线程的暂停时间不能超过多少毫秒。
而回收价值指的是某老年代对象中存活对象的数量越少,回收价值就越高,存活对象少也意味着将来能释放更多内存。而其他老年代对象中因为存活对象比较多,回收后可释放的内存较少,回收价值就比较低了。因此它会挑出一些回收价值比较高的老年代,连同当前的Eden区、幸存者区来做一次垃圾回收。

③混合垃圾回收

在这里插入图片描述
混合收集可能会重复执行多次,因为第一次在预定时间内可能回收了刚才的三个老年代,后续可能再执行多次混合收集把剩下的老年代重新标记后再进行释放。
在这里插入图片描述
可能出现并发失败的情况:垃圾回收速度小于分配新对象的速度,就会触发一次FullGC,它的暂停时间就会很长了。

*巨型对象

而当将要存储的一个对象太大,一个区域装不下的话,就会存储到一个巨型对象当中,一块巨型对象区域不够的话就会分配一个连续的区域来进行存储。
在这里插入图片描述

(3)总结

在这里插入图片描述

六、强引用、软引用、弱引用、虚引用的区别

这四种引用类型主要指的是在进行垃圾回收时不同引用进行垃圾回收的情况是不同的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 强引用
    可以被GC Root定位或关联到的对象就证明是存活的,就不会被垃圾回收,即使出现了内存不足、抛出OM异常也不会被回收的强引用对象。
  2. 软引用
    在进行垃圾回收时,一开始并不会垃圾回收当前的软引用对象,只有在进行垃圾回收后内存还是不足的情况下,才会再次进行垃圾回收并回收软引用对象。
  3. 弱引用
    一旦出现内存不足,弱引用对象就会被垃圾回收器直接回收掉。

总结:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Craaaayon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值