可达性分析算法简介

可达性分析算法通过GC Roots对象开始搜索,若某对象与GC Roots无引用连接,即视为可回收。常见的GC Roots包括启动类加载器、方法区的类静态变量、常量池引用、虚拟机栈变量表引用及本地方法栈引用。即使对象间互相引用,若无法到达GC Roots也会被回收。Java引用类型包括强引用、软引用、弱引用和虚引用,其中,弱引用关联的对象在GC时总会被回收,虚引用仅用于对象回收通知。
摘要由CSDN通过智能技术生成

概要

通过一系列的GC roots的对象为起始点,开始向下搜索,当一个对象到GC Roots没有任何引用相连,则证明

此对象为不可用,并将被判定为是可回收的对象。

那些对象可作为GC Roots对象?

被启动类(bootstrap加载器)加载的类和创建的对象

jvm运行时方法区类静态变量(static)引用的对象

jvm运行时方法区常量池引用的对象

jvm当前运行线程中的虚拟机栈变量表引用的对象

本地方法栈中(jni)引用的对象

分析

public class TestGC {

public Object instance;
private final static int _1M = 1024 * 1024; 
private byte[] bytesize =  new byte[2*_1M];

public static void testGC() {

    TestGC A = new TestGC();
    TestGC B = new TestGC();

    A.instance = B;
    B.instance = A;

    A = null;
    B = null;

    System.gc();
}

}
可达性分析算法即使存在互相引用的对象,但如果这两个对象无法访问到根对象,还是会被回收。

拓展

上面个提到的可达性分析算法中涉及的引用是指Java中的强引用。

Java将引用分为如下几种:

1.强引用:如Object obj = new Object();这类引用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值