垃圾回收
1. 如何判断对象可以回收
1.1 引用计数法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lpPM9avQ-1646097996409)(C:\Users\l\AppData\Roaming\Typora\typora-user-images\image-20220119110136835.png)]
1.2 可达性分析算法
- Java 虚拟机中的垃圾回收器采用可达性分析来探索所有存活的对象
- 扫描堆中的对象,看是否能够沿着 GC Root 对象为起点的引用链找到该对象,找不到,表示可以回收
- 哪些对象可以作为 GC Root?
1.3 四种引用
2. 垃圾回收算法
2.1 标记清除
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9KXe0urx-1646097996411)(C:\Users\l\AppData\Roaming\Typora\typora-user-images\image-20220119173611122.png)]
优点:速度快
缺点:造成空间不连续,形成内存碎片
2.2 标记整理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kuspME8o-1646097996412)(C:\Users\l\AppData\Roaming\Typora\typora-user-images\image-20220119173930597.png)]
优点:使内存更加紧凑,不会造成内存碎片问题
缺点:速度较慢,需要进行其他一些操作
2.3 复制
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cw0iBgmZ-1646097996413)(C:\Users\l\AppData\Roaming\Typora\typora-user-images\image-20220119175900042.png)]
优点:不会造成内存碎片
缺点:需要占用双倍内存空间
3. 分代垃圾回收
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w3kTtSPY-1646097996414)(C:\Users\l\AppData\Roaming\Typora\typora-user-images\image-20220119182046369.png)]
- 对象首先分配在伊甸园区域
- 当新生代空间不足时,触发 minor gc ,伊甸园和 from 区存活的对象使用 copy 复制到 to 区域,让存活的对象年龄加1并且叫唤 from 和 to
- minor gc 会引发 stop the world,暂停其它用户的线程,等垃圾回收结束,用户线程才恢复运行 (minor gc 的暂停时间比较短)
- 当对象年龄超过阈值时,就会晋升至老年代,最大年龄是15 (4bit)
- 当老年代空间不足,会先尝试触发 minor gc ,如果之后空间仍不足,那么触发 full gc ,也会引发 stop the world (暂停时间更长)
3.1 相关VM参数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aBQysvZQ-1646097996415)(C:\Users\l\AppData\Roaming\Typora\typora-user-images\image-20220120092440551.png)]
- 向堆中存入对象时,如果对象的大小大于了新生代伊甸园的大小,则会判断对象是否大于老年代的大小并且看是否能存入老年代,如果能,则对象提前晋升到老年代中,以解决内存紧张的情况,如果不能,则报出内存溢出异常
4. 垃圾回收器
4.1 串行
- 单线程
- 适合堆内存较小,适合个人电脑的情况
4.2 吞吐量优先
4.3 响应时间优先
4.4 G1
定义:Garbage First
适用场景
1) G1 垃圾回收阶段
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9T7y45f8-1646097996416)(C:\Users\l\AppData\Roaming\Typora\typora-user-images\image-20220120151625986.png)]
2) Young Collection
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cEa1h3WT-1646097996417)(C:\Users\l\AppData\Roaming\Typora\typora-user-images\image-20220120155340657.png)]
3) Young Collection + CM
4) Mixed Collection
会对E、S、O进行全面垃圾回收
5) Full GC
- SerialGC (串行)
- ParallelGC (并行 )
- CMS
- G1