JVM垃圾回收引用计数法和根搜索算法图解

上一篇 << 下一篇 >>>JVM垃圾回收STW(Stop-The-World)代码演示


引用计数法(不推荐使用)

JVM垃圾回收引用计数法和根搜索算法图解_第1张图片
  • 可回收对象

a、没有被引用的对象:A
b、没有互相应用的对象:BCD

  • 缺陷

循环依赖对象不可回收:EF

ReferenceCountingGC objA = new ReferenceCountingGC();
ReferenceCountingGC objB = new ReferenceCountingGC();
objA.instance=objB;
objB.instance=objA;
objA=null;
objB=null;

根搜索算法(GCRoots,也叫可达性算法,不推荐直接使用)

JVM垃圾回收引用计数法和根搜索算法图解_第2张图片
  • 可回收对象

灰色背景部分

  • 可作为GCRoots的对象包括

(1). 虚拟机栈(栈帧中的局部变量区,也叫做局部变量表)中引用的对象。
(2). 方法区中的类静态属性引用的对象。
(3). 方法区中常量引用的对象。
(4). 本地方法栈中JNI(Native方法)引用的对象。

  • 为什么jvm不直接使用gc root去回收整个堆呢

因为效率太低了,我们99.99%的对象基本存活不到3s

根搜索算法代码演示

1.测试代码

// 加入list中
ArrayList jaryes = new ArrayList();
jaryes.add("jarye");
jaryes.add("test");
System.out.println("存储成功..");
/***暂停打印堆信息1***/
System.in.read();
// 引用内存地址变为空
jaryes = null;
System.out.println("jaryes变为null");
/***暂停打印堆信息2***/
System.in.read();
System.in.read();
System.out.println("end");
 
 

2.堆信息导入到Eclipse Memory Analyzer工具

  • 根节点信息


    JVM垃圾回收引用计数法和根搜索算法图解_第3张图片
  • 堆信息1


    JVM垃圾回收引用计数法和根搜索算法图解_第4张图片
  • 堆信息2


    JVM垃圾回收引用计数法和根搜索算法图解_第5张图片

相关文章链接:
<< << << << <<<自定义SPI和热部署技术破坏类加载器的双亲委派模式
<< << << << <<<服务器CPU飙升为100%问题排查及如何避免
<< << << << << << <<<一张图看懂CMS垃圾回收器的底层原理
<< << << << << <<

你可能感兴趣的:(JVM垃圾回收引用计数法和根搜索算法图解)