垃圾回收算法

本文解析了垃圾回收的基础概念,包括什么是垃圾、为何需要垃圾回收,重点探讨了Java的垃圾回收机制,特别是引用计数法与可达性分析算法,并通过实例说明。此外,介绍了MAT和JProfiler在内存分析中的应用,以及垃圾回收算法如标记-清除、复制、增量收集和分区算法。
摘要由CSDN通过智能技术生成

1.垃圾回收概述

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

1.1 什么是垃圾

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

1.2 为什么需要GC

在这里插入图片描述

1.3 Java垃圾回收机制

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

2. 垃圾回收算法

2.1 垃圾标记算法

在这里插入图片描述

2.1.1 引用计数法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述因为JVM没有使用使用引用计数法所以obj1和obj2都不能回收
在这里插入图片描述

2.1.2 可达性分析算法

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

对象的finalization机制

该方法十分鸡肋,工作中几乎用不到。
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述MAT与JProfiler的GC Roots溯源

MAT
MAT是Memory Analyzer的简称,它是一款功能强大的Java堆内存分析器。用于查找内存泄漏以及查看内存消耗情况。
MAT是基于Eclipse开发的,是一款免费的性能分析工具

public class GCRootsTest {
    public static void main(String[] args) {
        List<Object> numList = new ArrayList<>();
        Date birth = new Date();

        for (int i = 0; i < 100; i++) {
            numList.add(String.valueOf(i));
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        System.out.println("数据添加完毕,请操作:");
        new Scanner(System.in).next();
        numList = null;
        birth = null;

        System.out.println("numList、birth已置空,请操作:");
        new Scanner(System.in).next();

        System.out.println("结束");
    }
}

生成堆dump文件
jmap -dump:format=b,file=C:\Users\qinshuoyu\Desktop\1.hprof.analysis\log\1.hprof 19420
在这里插入图片描述在这里插入图片描述

在这里插入图片描述numList、birth置空前,GC ROOTS中有ArrayList对象和Date对象
在这里插入图片描述numList、birth置空后,GC ROOTS中已经没有ArrayList对象和Date对象了
在这里插入图片描述MAT中GC ROOTS分类与之前所讲略有不同,只要分为系统类、JNI Global、线程、监视器

JProfiler

2.2 标记-清除算法原理及优缺点

垃圾清除阶段
在这里插入图片描述
在这里插入图片描述
标记的是可达的对象,因为从GC ROOTS出发只能关联到可达对象。
在这里插入图片描述
在这里插入图片描述

2.3 复制算法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述特别适合垃圾对象很多,存活对象很少的场景;例如:Young区的S0区和S1区
在这里插入图片描述

2.4 标记压缩(标记整理)

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

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

2.5 增量收集算法、分区算法

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

注:本文是学习 尚硅谷宋红康JVM全套教程(详解java虚拟机)所做笔记。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值