JVM性能优化工具 Mat使用

简介: JVM性能优化工具 Mat使用

Mat工具使用


下载地址:https://www.eclipse.org/mat/downloads.php


Java的gc_roots结构



System Class:系统类,启动类加载的一些类,在运行期间肯定会使用到的,它们能够作为GC root对象。都是一些class的实例对象。

JNI Global(老师讲课是Nactive Stack,按老师的来):JVM虚拟机在执行一些本地方法调用时必须调用操作系统方法,操作系统方法执行时所引用的一些java对象,其也可以作为根对象。

Thread:指的是一些活动线程,活动线程中使用的一些对象不能够被当成垃圾。线程在一次次运行时会有方法进行调用,那么也会产生一个栈帧,栈帧内所引用的对象可以作为根对象,局部变量引用的对象都可以作为一个根对象。

Busy Monitor:java对象中具有同步锁机制,也就是synchronized关键字,若是使用某个对象作为锁,那么该对象自然也不会被当成垃圾被回收。加锁的对象。


实际小案例


1、查看主线程方法中某个根节点的存在

案例描述:在程序中我们通过进行一次强引用以及取消引用来构建快照,并使用Mat工具来进行监测根对象的存在。


import java.io.*;
import java.util.ArrayList;
import java.util.List;
/**
 * 演示GC Roots
 */
public class Main {
    public static void main(String[] args) throws InterruptedException, IOException {
        //list1是一个变量,存储在活动栈帧里,相应的对象存储在堆中
        List<Object> list1 = new ArrayList<>();
        list1.add("a");
        list1.add("b");
        System.out.println(1);
        System.in.read();//阶段1:构建快照
        list1 = null;//取消强引用
        System.out.println(2);
        System.in.read();
        System.out.println("end...");//阶段2:构建快照
    }
}



分别在输出1、2时创建快照,我们可以借助jmap来进行创建


# 获取当前运行程序的进程号
jps 
# 创建两次快照
jmap -dump:format=b,live,file=1.bin 10556  # -dump表示将当前堆内存的状态抓取转储成一个文件,format=b表示二进制,live指的是抓快照时只抓取存活的对象,垃圾回收掉的会进行过滤,注意设置live参数会主动触发一次垃圾回收。
jmap -dump:format=b,live,file=2.bin 10556


此时我们就会在指定目录得到两个.bin文件,接着来使用Mat工具来进行分析:





查看GC roots对象



快照1:



快照2:由于jmap设置了live参数,所以在生成快照前进行了GC垃圾回收,并且由于已经对该集合对象设置了null,则表示不再进行强引用,那么此时垃圾回收就会将其清理掉了,自然下面也就查看不到了!


相关文章
|
3月前
|
存储 算法 Java
jvm性能优化(一)-基于JDK1.8
jvm性能优化(一)-基于JDK1.8
|
1月前
|
SQL 缓存 监控
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
本文详细解析了数据库、缓存、异步处理和Web性能优化四大策略,系统性能优化必知必备,大厂面试高频。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
|
24天前
|
Arthas Prometheus 监控
监控堆外使用JVM工具
监控堆外使用JVM工具
36 7
|
2月前
|
JavaScript 前端开发 Java
jvm的jshell,学生的工具
本文介绍了JVM的jshell工具,它为Java平台添加了REPL(读取-评估-打印循环)功能,使得学习、探索编码和原型代码变得更加便捷,但作者认为其在实际开发中较为鸡肋。
39 1
jvm的jshell,学生的工具
|
2月前
|
存储 算法 Java
Java虚拟机(JVM)的内存管理与性能优化
本文深入探讨了Java虚拟机(JVM)的内存管理机制,包括堆、栈、方法区等关键区域的功能与作用。通过分析垃圾回收算法和调优策略,旨在帮助开发者理解如何有效提升Java应用的性能。文章采用通俗易懂的语言,结合具体实例,使读者能够轻松掌握复杂的内存管理概念,并应用于实际开发中。
|
2月前
|
Arthas 监控 数据可视化
JVM进阶调优系列(7)JVM调优监控必备命令、工具集合|实用干货
本文介绍了JVM调优监控命令及其应用,包括JDK自带工具如jps、jinfo、jstat、jstack、jmap、jhat等,以及第三方工具如Arthas、GCeasy、MAT、GCViewer等。通过这些工具,可以有效监控和优化JVM性能,解决内存泄漏、线程死锁等问题,提高系统稳定性。文章还提供了详细的命令示例和应用场景,帮助读者更好地理解和使用这些工具。
|
2月前
|
存储 监控 算法
JVM调优深度剖析:内存模型、垃圾收集、工具与实战
【10月更文挑战第9天】在Java开发领域,Java虚拟机(JVM)的性能调优是构建高性能、高并发系统不可或缺的一部分。作为一名资深架构师,深入理解JVM的内存模型、垃圾收集机制、调优工具及其实现原理,对于提升系统的整体性能和稳定性至关重要。本文将深入探讨这些内容,并提供针对单机几十万并发系统的JVM调优策略和Java代码示例。
59 2
|
2月前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
58 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
|
3月前
|
存储 Java 编译器
🔍深入Android底层,揭秘JVM与ART的奥秘,性能优化新视角!🔬
【9月更文挑战第12天】在Android开发领域,深入了解其底层机制对提升应用性能至关重要。本文详述了从早期Dalvik虚拟机到现今Android Runtime(ART)的演变过程,揭示了ART通过预编译技术实现更快启动速度和更高执行效率的奥秘。文中还介绍了ART的编译器与运行时环境,并提出了减少DEX文件数量、优化代码结构及合理管理内存等多种性能优化策略。通过掌握这些知识,开发者可以从全新的角度提升应用性能。
79 11
|
4月前
|
缓存 监控 算法
吃透 JVM 诊断方法与工具使用
【8月更文挑战第4天】深入了解并掌握JVM诊断需把握几大要点:1) 熟悉JVM内存模型,如堆、栈及方法区;2) 掌握垃圾回收机制与算法;3) 运用工具如`jps`(查看Java进程)、`jstat`(监控运行状态)、`jmap`(生成堆快照)、`jhat`(分析堆快照)、`jstack`(检查线程栈); 4) 利用专业工具如Eclipse Memory Analyzer分析堆转储文件查找内存泄漏; 5) 动态监控与调整JVM参数; 6) 结合日志分析性能瓶颈。通过实战案例加深理解,有效应对JVM性能问题。