42、JVM实战:工具:VisualVM

27.3–工具–VisualVM–使用


测试代码

public class Demo2 {
    private static final int _1MB = 1 * 1024 * 1024;

    public static void main(String[] args) throws InterruptedException {
        int size = 1000 * 10000;
        int time = 1000;
        byte[] a1 = null;

        for (int i = 0; i < size; ) {
            System.out.println("次数:" + ++i);
            a1 = new byte[_1MB];
            Thread.sleep(time);
        }
    }
}

vm配置
-Xms10M
-Xmx10M
-XX:+UseG1GC
-XX:NewRatio=2
-XX:SurvivorRatio=8
-XX:MaxTenuringThreshold=10

1、监视(CPU,堆,类,线程)

*

1.1、正常的堆,应该是锯齿周期情况

*

2、在出现OOME时生成堆

*

3、内存 性能分析

1、 可以查看哪些对象占用了较多的内存;
2、 哪些对象存活的时间比较长;

*

4、CPU 性能分析

*

5、抽样器分析

*
*

6、线程分析

*

7、visual GC 分析(安装插件)

*

8、快照功能

1、 生成任意个性能分析快照并保存到本地;
2、 可以离线进行性能分析;

Profiler 快照
*

应用程序快照

*

9、线程转储的生成与分析

对正在运行的本地应用程序生成线程转储,把活动线程的堆栈踪迹打印出来,帮助我们了解线程运行的情况,诊断死锁、应用程序瘫痪等问题。

* *

10、堆转储的生成与分析

1、 可以看到摘要、类、实例数等信息以及通过OQL控制台执行查询语句功能;
2、 堆转储的摘要包括转储的文件大小、路径等基本信息,运行的系统环境信息,也可以显示所有的线程信息;
* *
*