57.使用MAT和JProfiler查看GC Roots

1.使用MAT查看GC Roots

  1. MAT简介
    下载:https://www.eclipse.org/mat/downloads.php
    在这里插入图片描述
  2. 生成dump文件的两种方式
    a)使用jmap命令
    在这里插入图片描述
    b)使用JVisualVM生成dump
    在这里插入图片描述
    演示:
package jvn;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Scanner;

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("结束");
	}
}


  1. 运行上面的代码,打开JVisualVM,找到对应的进程,点击堆 Dump如下图
    在这里插入图片描述
  2. 保存生成的dump文件,这样就生成了dump文件
    在这里插入图片描述
  3. 使用MAT查看dump文件的GC Roots。如下图所示,使用MAT打开上面产生的dump文件,然后选择Java Basics -> GC Roots
    在这里插入图片描述
  4. 找到Thread里面的mian thread。如下图所示。
    在这里插入图片描述
  5. 可以看到ArrayList变量numListDate变量birth 都是GC Roots
    在这里插入图片描述

2.使用JProfiler查看GC Roots

在日常工作中,通常不需要区查看所有的GC Roots,一般是针对某一个对象去查看它的GC Roots

  1. 运行上面的程序,点击Eclipse里面的JProfiler
    在这里插入图片描述
  2. 选择All Objects查看所有的对象。
    在这里插入图片描述
  3. 选择View->Mark Current Values
    在这里插入图片描述
    4.选中想要查看GC Roots的对象,比如第一个char数组对象。右击然后选中Show Selection In Heap Walker
    在这里插入图片描述
    5.如下图所示,在打开的Heap Walker中,选中References,然后选择一个对应的一个char[]。最后选择Incoming references,点击Show Paths To GC Root。就可以查看到对应这个char数组对象,它的GC Roots是静态变量Static Out of class java.lang.System
    在这里插入图片描述

更多JVM文章请访问我的JVM专栏:
https://blog.csdn.net/u011069294/category_10113093.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值