GC Root分析

25 篇文章 0 订阅
6 篇文章 0 订阅

GC Root分析

解决问题

  • 问题

    java语言自动执行垃圾回收,但什么是垃圾呢?简单来说就是内存中已经不在被使用到的空间就是垃圾,那么又如何判断一个对象是否可以被回收呢?这时,出现了引用计数法,但是这种方法难以解决循环引用问题,那么又如何解决这个问题呢?

  • 解决

    枚举根节点做可达性分析(跟搜索路径)

适用场景

复制算法,标记-清除算法,标记-压缩,都使用了可达性分析的方法

组成部分

​ 所谓"GC roots"或者说tracing GC的"根集合",就是一组必须活跃的根集合

定义

​ 根搜索算法是JVM用来的判断对象是否存活的算法,此算法基本思路为通过一系列的“GC Roots”对象作为起始点,从这些节点往下搜索,当一个对象和GC Roots不可达时,则该对象是无用的,可被回收的。

可作为GC Root的对象

  • 虚拟机栈(栈帧中的局部变量区,也叫作局部变量表)中引用的对象.
  • 方法区中的静态属性引用的对象
  • 方法区中常量引用的对象
  • 本地方法栈中JNI(Native方法)引用的对象(例如:线程中的start方法)

示例

package top.ygy.jvm;

/**
 * @Description: TODO(GC Root示例)
 * @author yangguangyuan
 * @date 2019年6月27日
 * 
 *       1 虚拟机栈(栈帧中的局部变量区,也叫作局部变量表)中引用的对象. 
 *       2 方法区中的静态属性引用的对象 
 *       3 方法区中常量引用的对象 
 *       4 本地方法栈中JNI(Native方法)引用的对象(例如:线程中的start方法)
 */
public class GCRootDemo {

	private byte[] byteArray = new byte[1024 * 1024 * 1024];
//	private static GCRootDemo2 t2; //第2种GC Root
//	private static final GCRootDemo3 t3 = new GCRootDemo3(8);//第3种GC Root
	
	private static void m1() {
		GCRootDemo t1 = new GCRootDemo();
		System.gc();
		System.out.println("第一次gc完成");
	}
	
	public static void main(String[] args) {
		m1();//第1种GC Root
	}
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值