JVM内存以及常用工具的详细讲解-刘宇

2023-10-15 07:10

本文主要是介绍JVM内存以及常用工具的详细讲解-刘宇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

JVM内存以及常用工具的详细讲解-刘宇

  • 一、JVM内存结构介绍
    • 1.1、JVM内存结构
    • 1.2、程序计数器
    • 1.3、Java 虚拟机栈
    • 1.4、本地方法栈
    • 1.5、Java 堆
    • 1.6、方法区
  • 二、引用访问对象的两种方式
    • 2.1、句柄模式
    • 2.2、指针模式(HotSpot VM使用的就是这个模式)
    • 2.3、二者区别
  • 三、堆中存储对象的过程
    • 3.1、new关键字创建对象的3个步骤
    • 3.2、堆中存储对象的两种方式
  • 四、对象在内存中的布局
    • 4.1、对象头
    • 4.2、实例数据
    • 4.3、对齐填充
  • 五、练习
    • 5.1、堆产生OutOfMemoryError
    • 5.2、栈产生StackOverflowError``
    • 5.4、利用jconsole和jvisualvm检测线程死锁
    • 5.4、方法区产生OutOfMemoryError
  • 六、JDK自带命令的使用
    • 6.1、jmap的使用
      • 6.1.1、输出程序的类加载器列表
      • 6.1.2、输出程序的堆的信息
    • 6.2、jcmd的使用
      • 6.2.1、输出java进程
      • 6.2.2、查看当前进程的虚拟机所支持的命令
      • 6.2.3、输出Java进程的启动参数
      • 6.2.4、输出JVM的性能相关的参数
      • 6.2.5、输出Java进程启动的时长
      • 6.2.6、输出Java进程中类的统计信息
      • 6.2.7、输出线程的堆栈信息
      • 6.2.8、导出Java进程堆信息
      • 6.2.9、导出Java进程堆信息
      • 6.2.10、查看JVM的属性信息
      • 6.2.11、查看JVM的版本号
      • 6.2.12、查看JVM启动的命令行参数
    • 6.3、jstack的使用
    • 6.4、jmc的使用
    • 6.5、jhat的使用

一、JVM内存结构介绍

1.1、JVM内存结构

在这里插入图片描述

1.2、程序计数器

  • 内存空间小,线程私有。字节码解释器工作是就是通过改变这个计数器的值来选取下一条需要执行指令的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖计数器完成

  • 如果线程正在执行一个 Java 方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是 Native 方法,这个计数器的值则为 (Undefined)。此内存区域是唯一一个在 Java 虚拟机规范中没有规定任何 OutOfMemoryError 情况的区域。

1.3、Java 虚拟机栈

  • 线程私有,生命周期和线程一致。描述的是 Java 方法执行的内存模型:每个方法在执行时都会床创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行结束,就对应着一个栈帧从虚拟机栈中入栈到出栈的过程。

  • 局部变量表:存放了编译期可知的各种基本类型(boolean、byte、char、short、int、float、long、double)、对象引用(reference 类型)和 returnAddress 类型(指向了一条字节码指令的地址)

  • StackOverflowError:线程请求的栈深度大于虚拟机所允许的深度。

  • OutOfMemoryError:如果虚拟机栈可以动态扩展,而扩展时无法申请到足够的内存。

  • 可以通过-Xss来控制栈大小

1.4、本地方法栈

  • 区别于 Java 虚拟机栈的是,Java 虚拟机栈为虚拟机执行 Java 方法(也就是字节码)服务,而本地方法栈则为虚拟机使用到的 Native 方法服务。也会有 StackOverflowError 和 OutOfMemoryError 异常。

1.5、Java 堆

  • 对于绝大多数应用来说,这块区域是 JVM 所管理的内存中最大的一块。线程共享,主要是存放对象实例和数组。
  • 内部会划分出多个线程私有的分配缓冲区(Thread Local Allocation Buffer, TLAB)。可以位于物理上不连续的空间,但是逻辑上要连续。
  • 与堆相关的一个重要概念是垃圾收集器,现代几乎所有的垃圾收集器都是采用的分代收集算法,所以堆空间也对其做了相应的划分:新生代与老年代。Eden空间、From Survivor空间、To Survivor空间。
  • OutOfMemoryError:如果堆中没有内存完成实例分配,并且堆也无法再扩展时,抛出该异常。
  • 可以通过-Xms、-Xmx来控制堆大小

1.6、方法区

  • 属于共享内存区域,存储元信息,就是已被虚拟机加载的class文件结构信息(包括常量池、字段描述、方法描述)、常量、静态变量、即时编译器编译后的代码等数据。也有人称为永久代(Permanent Generation),但是从JDK1.8开始,已经彻底废弃了永久代,使用元空间(meta space),而元空间实际是使用的操作系统的本地内存,初始大小为21M。
  • 关于元空间替换永久代的相关介绍请点击参考文章
  • 永久代:通过-XX:PemSize、-XX:MaxPemSize来控制大小;元空间:通过-XX:MetaspaceSize、-XX:MaxMetaspaceSize来控制大小

二、引用访问对象的两种方式

2.1、句柄模式

在这里插入图片描述

2.2、指针模式(HotSpot VM使用的就是这个模式)

在这里插入图片描述

2.3、二者区别

  • 使用句柄来访问的最大好处就是引用变量中存储的是稳定的句柄地址,在垃圾回收器阶段可能会对堆空间进行压缩(将可用空间和已用空间分为左右两侧),那么如果此时使用句柄模式的话,其中对象实例数据的指针就会随着垃圾回收阶段不断变动,从而影响效率。
  • 而使用直接指针访问方式最大的好处就是速度更快,节省了一次指针定位的时间开销,但是在对象被移动时,又需要改变引用变量的地址

三、堆中存储对象的过程

3.1、new关键字创建对象的3个步骤

  • 在堆内存中创建出对象的实例
  • 为对象的实例成员变量赋初值
  • 将对象的引用返回

3.2、堆中存储对象的两种方式

  • 指针碰撞: 前提是堆中的空间通过一个指针进行分割,一侧是已经被占用的空间,另一侧是未被占用的空间
  • 空闲列表: 前提是堆内存空间中已被使用与未被使用的空间是交织在一起的,这时,虚拟机就需要通过一个列表来记录哪些空间是可以使用的,哪些空间是已被使用的,接下来找出可以容纳下新创建对象的且未被使用的空间,在此空间存放该对象并修改列表上的记录。

因此,使用Serial、ParNew等代用Compact过程的垃圾收集器时,采用“指针碰撞” 方式进行对象实例内存分配,而使用像CMS这种基于MARK_SWEEP垃圾回收算法的垃圾收集器时,JVM则采用“空闲列表”为对象实例进行内存分配。

四、对象在内存中的布局

4.1、对象头

  • 包括哈希吗、GC分代年龄、锁状态标记、线程持有的锁等等。
  • 另一部分是类型指针,即对象指向它的类元数据的指针,虚拟机通过这个指针,确定该类具体是哪个类。

4.2、实例数据

  • 存储对象真正的有效数据。

4.3、对齐填充

  • 对象的大小必须是8的倍数,对象头正好是8的倍数,所以在实例数据没有对齐时,就有了对齐填充来补全。

五、练习

5.1、堆产生OutOfMemoryError

添加JVM参数:

通过设置最小和最大堆空间大小来实现快速的OutOfMemoryError,设置最大和最小堆空间为5M,同时转储OutOfMemoryError到具体文件

-Xms5m -Xmx5m -XX:+HeapDumpOnOutOfMemoryError

代码:

package com.brycen.demo.memory;import java.util.ArrayList;
import java.util.List;public class MyTest1 {public static void main(String[] args) {List<MyTest1> list = new ArrayList<>();for(;;){list.add(new MyTest1());}}
}

运行结果:

java.lang.OutOfMemoryError: GC overhead limit exceeded
Dumping heap to java_pid6088.hprof ...
Heap dump file created [8924835 bytes in 0.212 secs]
Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceededat com.brycen.demo.memory.MyTest1.main(MyTest1.java:11)

错误分析:

此时我们可以通过JDK自带的jvisualvm来分析错误文件,在控制台输入jvisualvm即可打开,随后选择转储的错误文件即可。

在这里插入图片描述

5.2、栈产生StackOverflowError``

代码:

package com.brycen.demo.memory;public class MyTest2 {private int length;public int getLength() {return length;}public void test(){this.length++;try{Thread.sleep(1);}catch (Exception ex){ex.printStackTrace();}test();}public static void main(String[] args) {MyTest2 myTest2 = new MyTest2();try{myTest2.test();}catch (Throwable ex){//需要抓取Throwable,因为它不是异常,而是错误System.out.println(myTest2.getLength());ex.printStackTrace();}}
}

运行结果:

9923
java.lang.StackOverflowErrorat com.brycen.demo.memory.MyTest2.test(MyTest2.java:14)at com.brycen.demo.memory.MyTest2.test(MyTest2.java:18)at com.brycen.demo.memory.MyTest2.test(MyTest2.java:18)at com.brycen.demo.memory.MyTest2.test(MyTest2.java:18)at com.brycen.demo.memory.MyTest2.test(MyTest2.java:18)at com.brycen.demo.memory.MyTest2.test(MyTest2.java:18)......

错误分析:

此时我们可以通过JDK自带的jconsole来分析错误文件,在控制台输入jconsole即可打开。我们选中当前main线程,如下图我们可以得知当前线程的堆栈跟踪情况,递归调用了6900次,当前还没有报StackOverflowError错误,随后到达9923时报错了

在这里插入图片描述

5.4、利用jconsole和jvisualvm检测线程死锁

源代码:

package com.brycen.demo.memory;public class MyTest3 {public static void main(String[] args) {new Thread(()->A.method(),"Thread-A").start();new Thread(()->B.method(),"Thread-B").start();}
}
class A{public static synchronized void method(){System.out.println("do A method");try {Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();}B.method();}
}
class B{public static synchronized void method(){System.out.println("do B method");try {Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();}A.method();}
}

运行效果:

do A method
do B method

jconsole分析死锁:

  • 线程A:
    在这里插入图片描述

  • 线程B:
    在这里插入图片描述

  • 检测死锁:
    在这里插入图片描述
    jvisualvm分析死锁:
    在这里插入图片描述
    在这里插入图片描述

5.4、方法区产生OutOfMemoryError

  • 由上面的介绍可知,从JDK1.8开始,已经彻底废弃了永久代,使用元空间(meta space),而元空间实际是使用的操作系统的本地内存,初始大小为21M,默认当达到21M时JVM就会自动扩容,直至本地内存不足。所以为了演示方法区出现OOM,我们需要通过添加JVM参数。
  • -XX:MaxMetaspaceSize:限制其增长
  • -XX:MinMetaspaceFreeRatio:来设置元空间空闲比例的最小值
  • -XX:ManMetaspaceFreeRatio:来设置元空间空闲比例的最大值

源代码:

这里我们使用了cglib来帮助我们不断的动态创建类,并且添加JVM参数:XX:MaxMetaspaceSize=200m,从而使元空间出现OOM

public class MyTest4 {public static void main(String[] args) {for (;;){Enhancer enhancer = new Enhancer();enhancer.setSuperclass(MyTest4.class);enhancer.setUseCache(false);enhancer.setCallback((MethodInterceptor)(obj, method, argsl, proxy)->proxy.invokeSuper(obj,argsl));System.out.println("create new dynamic class");enhancer.create();}}
}

运行结果:

...
...
create new dynamic class
create new dynamic class
create new dynamic class
Exception in thread "main" java.lang.OutOfMemoryError: Metaspaceat net.sf.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:345)at net.sf.cglib.proxy.Enhancer.generate(Enhancer.java:492)at net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:114)at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:291)at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:480)at net.sf.cglib.proxy.Enhancer.create(Enhancer.java:305)at com.ideas.trucks.memory.MyTest4.main(MyTest4.java:22)

jvisualvm分析方法区:
在这里插入图片描述

六、JDK自带命令的使用

6.1、jmap的使用

6.1.1、输出程序的类加载器列表

命令:jmap -clstats pid

Attaching to process ID 24652, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.121-b13
finding class loader instances ..done.
computing per loader stat ..done.
please wait.. computing liveness....liveness analysis may be inaccurate ...
class_loader    classes bytes   parent_loader   alive?  type<bootstrap>     534     1003449   null          live    <internal>
0x00000006c1c0a178      48      140877  0x00000006c1c0a1e8      live    sun/misc/Launcher$AppClassLoader@0x00000007c000f6a0
0x00000006c1c0a1e8      0       0         null          live    sun/misc/Launcher$ExtClassLoader@0x00000007c000fa48total = 3       582     1144326     N/A         alive=3, dead=0     N/A

6.1.2、输出程序的堆的信息

命令:jmap -heap pid

Attaching to process ID 24652, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.121-b13using thread-local object allocation.
Parallel GC with 4 thread(s)Heap Configuration:MinHeapFreeRatio         = 0MaxHeapFreeRatio         = 100MaxHeapSize              = 4265607168 (4068.0MB)NewSize                  = 89128960 (85.0MB)MaxNewSize               = 1421869056 (1356.0MB)OldSize                  = 179306496 (171.0MB)NewRatio                 = 2SurvivorRatio            = 8MetaspaceSize            = 21807104 (20.796875MB)CompressedClassSpaceSize = 1073741824 (1024.0MB)MaxMetaspaceSize         = 17592186044415 MBG1HeapRegionSize         = 0 (0.0MB)Heap Usage:
PS Young Generation
Eden Space:capacity = 31981568 (30.5MB)used     = 2558576 (2.4400482177734375MB)free     = 29422992 (28.059951782226562MB)8.00015809106045% used
From Space:capacity = 524288 (0.5MB)used     = 0 (0.0MB)free     = 524288 (0.5MB)0.0% used
To Space:capacity = 524288 (0.5MB)used     = 0 (0.0MB)free     = 524288 (0.5MB)0.0% used
PS Old Generationcapacity = 179306496 (171.0MB)used     = 1007688 (0.9610061645507812MB)free     = 178298808 (170.03899383544922MB)0.5619919090940241% used1765 interned Strings occupying 158968 bytes.

6.2、jcmd的使用

6.2.1、输出java进程

命令:jcmd或者jcmd -l,他们输出的结果和jps -m差不多是一样的

24672 org.jetbrains.jps.cmdline.Launcher D:/IntelliJ_IDEA_2020.1/plugins/java/lib/javac2.jar;D:/IntelliJ_IDEA_2020.1/lib/httpclient-4.5.12.jar;D:/IntelliJ_IDEA_2020.1/lib/maven-model-builder-3.6.1.jar;D:/IntelliJ_IDEA_2020.1/plugins/java/lib/aether-dependency-resolver.jar;D:/IntelliJ_IDEA_2020.1/lib/jdom.jar;D:/IntelliJ_IDEA_2020.1/lib/commons-lang3-3.9.jar;D:/IntelliJ_IDEA_2020.1/plugins/java/lib/maven-resolver-transport-http-1.3.3.jar;D:/IntelliJ_IDEA_2020.1/lib/maven-builder-support-3.6.1.jar;D:/IntelliJ_IDEA_2020.1/lib/maven-resolver-api-1.3.3.jar;D:/IntelliJ_IDEA_2020.1/lib/plexus-utils-3.2.0.jar;D:/IntelliJ_IDEA_2020.1/lib/annotations.jar;D:/IntelliJ_IDEA_2020.1/lib/idea_rt.jar;D:/IntelliJ_IDEA_2020.1/lib/platform-api.jar;D:/IntelliJ_IDEA_2020.1/lib/util.jar;D:/IntelliJ_IDEA_2020.1/plugins/java/lib/jps-builders-6.jar;D:/IntelliJ_IDEA_2020.1/lib/plexus-component-annotations-1.7.1.jar;D:/IntelliJ_IDEA_2020.1/lib/httpcore-4.4.13.jar;D:/IntelliJ_IDEA_2020.1/lib/maven-repository-metadata-3.6.1.jar;D:/IntelliJ_IDEA
25472 com.ideas.core.application.ISTPApplication
25444 com.intellij.internal.statistic.uploader.EventLogUploader --ide-token C:\Users\ideassoft\AppData\Local\JetBrains\IntelliJIdea2020.1\token --recorder FUS --files C:\Users\ideassoft\AppData\Local\JetBrains\IntelliJIdea2020.1\event-log\a4ff-4e6e-949a-b690ca7008d9-201.6668.113-release.log --device 23071911ac004e7-a3d4-48d9-8d69-cc8b49387e7b --bucket 119 --url https://resources.jetbrains.com/storage/fus/config/%s/lion-v3-assistant.xml --product IU --user-agent IntelliJ IDEA/201.6668.113
14696 sun.tools.jcmd.JCmd
28648 D:/HBuilderX/plugins/ls/ls.jar -data C:/Users/ideassoft/AppData/Roaming/HBuilder X -installDir D:/HBuilderX -applicationPath D:/HBuilderX -hostPort 9292 -pid 3772
24652 com.ideas.trucks.memory.MyTest5
15408 org.jetbrains.jps.cmdline.Launcher D:/IntelliJ_IDEA_2020.1/plugins/java/lib/javac2.jar;D:/IntelliJ_IDEA_2020.1/lib/httpclient-4.5.12.jar;D:/IntelliJ_IDEA_2020.1/lib/maven-model-builder-3.6.1.jar;D:/IntelliJ_IDEA_2020.1/plugins/java/lib/aether-dependency-resolver.jar;D:/IntelliJ_IDEA_2020.1/lib/jdom.jar;D:/IntelliJ_IDEA_2020.1/lib/commons-lang3-3.9.jar;D:/IntelliJ_IDEA_2020.1/plugins/java/lib/maven-resolver-transport-http-1.3.3.jar;D:/IntelliJ_IDEA_2020.1/lib/maven-builder-support-3.6.1.jar;D:/IntelliJ_IDEA_2020.1/lib/maven-resolver-api-1.3.3.jar;D:/IntelliJ_IDEA_2020.1/lib/plexus-utils-3.2.0.jar;D:/IntelliJ_IDEA_2020.1/lib/annotations.jar;D:/IntelliJ_IDEA_2020.1/lib/idea_rt.jar;D:/IntelliJ_IDEA_2020.1/lib/platform-api.jar;D:/IntelliJ_IDEA_2020.1/lib/util.jar;D:/IntelliJ_IDEA_2020.1/plugins/java/lib/jps-builders-6.jar;D:/IntelliJ_IDEA_2020.1/lib/plexus-component-annotations-1.7.1.jar;D:/IntelliJ_IDEA_2020.1/lib/httpcore-4.4.13.jar;D:/IntelliJ_IDEA_2020.1/lib/maven-repository-metadata-3.6.1.jar;D:/IntelliJ_IDEA
22256 org.jetbrains.jps.cmdline.Launcher D:/IntelliJ_IDEA_2020.1/plugins/java/lib/javac2.jar;D:/IntelliJ_IDEA_2020.1/lib/httpclient-4.5.12.jar;D:/IntelliJ_IDEA_2020.1/lib/maven-model-builder-3.6.1.jar;D:/IntelliJ_IDEA_2020.1/plugins/java/lib/aether-dependency-resolver.jar;D:/IntelliJ_IDEA_2020.1/lib/jdom.jar;D:/IntelliJ_IDEA_2020.1/lib/commons-lang3-3.9.jar;D:/IntelliJ_IDEA_2020.1/plugins/java/lib/maven-resolver-transport-http-1.3.3.jar;D:/IntelliJ_IDEA_2020.1/lib/maven-builder-support-3.6.1.jar;D:/IntelliJ_IDEA_2020.1/lib/maven-resolver-api-1.3.3.jar;D:/IntelliJ_IDEA_2020.1/lib/plexus-utils-3.2.0.jar;D:/IntelliJ_IDEA_2020.1/lib/annotations.jar;D:/IntelliJ_IDEA_2020.1/lib/idea_rt.jar;D:/IntelliJ_IDEA_2020.1/lib/platform-api.jar;D:/IntelliJ_IDEA_2020.1/lib/util.jar;D:/IntelliJ_IDEA_2020.1/plugins/java/lib/jps-builders-6.jar;D:/IntelliJ_IDEA_2020.1/lib/plexus-component-annotations-1.7.1.jar;D:/IntelliJ_IDEA_2020.1/lib/httpcore-4.4.13.jar;D:/IntelliJ_IDEA_2020.1/lib/maven-repository-metadata-3.6.1.jar;D:/IntelliJ_IDEA
8144 com.brycen.cloud.eurekaserver.EurekaServerApplication
1076 org.jetbrains.jps.cmdline.Launcher D:/IntelliJ_IDEA_2020.1/plugins/java/lib/javac2.jar;D:/IntelliJ_IDEA_2020.1/lib/httpclient-4.5.12.jar;D:/IntelliJ_IDEA_2020.1/lib/maven-model-builder-3.6.1.jar;D:/IntelliJ_IDEA_2020.1/plugins/java/lib/aether-dependency-resolver.jar;D:/IntelliJ_IDEA_2020.1/lib/jdom.jar;D:/IntelliJ_IDEA_2020.1/lib/commons-lang3-3.9.jar;D:/IntelliJ_IDEA_2020.1/plugins/java/lib/maven-resolver-transport-http-1.3.3.jar;D:/IntelliJ_IDEA_2020.1/lib/maven-builder-support-3.6.1.jar;D:/IntelliJ_IDEA_2020.1/lib/maven-resolver-api-1.3.3.jar;D:/IntelliJ_IDEA_2020.1/lib/plexus-utils-3.2.0.jar;D:/IntelliJ_IDEA_2020.1/lib/annotations.jar;D:/IntelliJ_IDEA_2020.1/lib/idea_rt.jar;D:/IntelliJ_IDEA_2020.1/lib/platform-api.jar;D:/IntelliJ_IDEA_2020.1/lib/util.jar;D:/IntelliJ_IDEA_2020.1/plugins/java/lib/jps-builders-6.jar;D:/IntelliJ_IDEA_2020.1/lib/plexus-component-annotations-1.7.1.jar;D:/IntelliJ_IDEA_2020.1/lib/httpcore-4.4.13.jar;D:/IntelliJ_IDEA_2020.1/lib/maven-repository-metadata-3.6.1.jar;D:/IntelliJ_IDEA
27604
8404
5560 org.tanukisoftware.wrapper.WrapperSimpleApp org.apache.activemq.console.Main start
15676 com.ideas.IdsApplication

6.2.2、查看当前进程的虚拟机所支持的命令

命令:jcmd pid help

24652:
The following commands are available:
JFR.stop
JFR.start
JFR.dump
JFR.check
VM.native_memory
VM.check_commercial_features
VM.unlock_commercial_features
ManagementAgent.stop
ManagementAgent.start_local
ManagementAgent.start
GC.rotate_log
Thread.print
GC.class_stats
GC.class_histogram
GC.heap_dump
GC.run_finalization
GC.run
VM.uptime
VM.flags
VM.system_properties
VM.command_line
VM.version
helpFor more information about a specific command use 'help <command>'.

6.2.3、输出Java进程的启动参数

命令:jcmd pid VM.flags

24652:
-XX:CICompilerCount=3 -XX:InitialHeapSize=268435456 -XX:MaxHeapSize=4265607168 -XX:MaxNewSize=1421869056 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=89128960 -XX:OldSize=179306496 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC

6.2.4、输出JVM的性能相关的参数

命令:jcmd pid PerfCounter.print

24652:
java.ci.totalTime=1382988
java.cls.loadedClasses=545
java.cls.sharedLoadedClasses=0
java.cls.sharedUnloadedClasses=0
java.cls.unloadedClasses=0
java.property.java.class.path="C:\Program Files\Java\jdk1.8.0_121\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_12"
java.property.java.endorsed.dirs="C:\Program Files\Java\jdk1.8.0_121\jre\lib\endorsed"
java.property.java.ext.dirs="C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext;C:\Windows\Sun\Java\lib\ext"
java.property.java.home="C:\Program Files\Java\jdk1.8.0_121\jre"
java.property.java.library.path="C:\Program Files\Java\jdk1.8.0_121\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;D:\Flutter\Git\Git\bin;D:\Flutter\flutter\flutter\bin;C:\Program Files\Java\jdk1.8.0_121\bin;C:\Program Files\Java\jdk1.8.0_121\jre\bin;%CATALINA_HOME%\lib;%CATALINA_HOME%\bin;D:\node\node_modules;D:\FFmpeg\ffmpeg-4.1.3-win64-static\bin;D:\node;C:\Users\ideassoft\AppData\Local\Programs\Python\Python37;D:\node\node_global;D:\apache-maven-3.6.1\bin;C:\Program Files (x86)\MySQL\MySQL Server 5.5\bin;C:\Program Files\TortoiseSVN\bin;C:\Program Files\MySQL\MySQL Server 5.5\bin;D:\nodejs\;D:\Git\cmd;D:\py\Scripts\;D:\py\;C:\Users\ideassoft\AppData\Local\Programs\Python\Python37\Scripts\;C:\Users\ideassoft\AppData\Local\Programs\Python\Python37\;C:\Users\ideassoft\AppData\Local\Microsoft\WindowsApps;D:\nodejs\node_global;D:\apache-maven-3.6.3\bin\;D:\Android\flut"
java.property.java.version="1.8.0_121"
java.property.java.vm.info="mixed mode"
java.property.java.vm.name="Java HotSpot(TM) 64-Bit Server VM"
java.property.java.vm.specification.name="Java Virtual Machine Specification"
java.property.java.vm.specification.vendor="Oracle Corporation"
java.property.java.vm.specification.version="1.8"
java.property.java.vm.vendor="Oracle Corporation"
java.property.java.vm.version="25.121-b13"
java.rt.vmArgs="-agentlib:jdwp=transport=dt_socket,address=127.0.0.1:59996,suspend=y,server=n -javaagent:D:\IntelliJ_IDEA_2020.1\plugins\java\lib\rt\debugger-agent.jar -Dfile.encoding=UTF-8"
java.rt.vmFlags=""
java.threads.daemon=4
java.threads.live=5
java.threads.livePeak=5
java.threads.started=5
sun.ci.compilerThread.0.compiles=18
sun.ci.compilerThread.0.method=""
sun.ci.compilerThread.0.time=34
sun.ci.compilerThread.0.type=1
sun.ci.compilerThread.1.compiles=17
sun.ci.compilerThread.1.method=""
sun.ci.compilerThread.1.time=34
sun.ci.compilerThread.1.type=1
sun.ci.compilerThread.2.compiles=80
sun.ci.compilerThread.2.method=""
sun.ci.compilerThread.2.time=39
sun.ci.compilerThread.2.type=1
sun.ci.lastFailedMethod=""
sun.ci.lastFailedType=0
sun.ci.lastInvalidatedMethod=""
sun.ci.lastInvalidatedType=0
sun.ci.lastMethod="java/util/zip/ZipFile$ZipFileInputStream close"
sun.ci.lastSize=136
sun.ci.lastType=1
sun.ci.nmethodCodeSize=163040
sun.ci.nmethodSize=289440
sun.ci.osrBytes=114
sun.ci.osrCompiles=3
sun.ci.osrTime=40031
sun.ci.standardBytes=15614
sun.ci.standardCompiles=112
sun.ci.standardTime=1342957
sun.ci.threads=3
sun.ci.totalBailouts=0
sun.ci.totalCompiles=115
sun.ci.totalInvalidates=0
sun.classloader.findClassTime=119671500
sun.classloader.findClasses=11
sun.classloader.parentDelegationTime=5176300
sun.cls.appClassBytes=61717
sun.cls.appClassLoadCount=46
sun.cls.appClassLoadTime=100004
sun.cls.appClassLoadTime.self=76519
sun.cls.classInitTime=1574446
sun.cls.classInitTime.self=1271261
sun.cls.classLinkedTime=705954
sun.cls.classLinkedTime.self=645273
sun.cls.classVerifyTime=60367
sun.cls.classVerifyTime.self=18028
sun.cls.defineAppClassTime=13930
sun.cls.defineAppClassTime.self=553
sun.cls.defineAppClasses=11
sun.cls.initializedClasses=444
sun.cls.isUnsyncloadClassSet=0
sun.cls.jniDefineClassNoLockCalls=0
sun.cls.jvmDefineClassNoLockCalls=11
sun.cls.jvmFindLoadedClassNoLockCalls=96
sun.cls.linkedClasses=491
sun.cls.loadInstanceClassFailRate=0
sun.cls.loadedBytes=1127344
sun.cls.lookupSysClassTime=183479
sun.cls.methodBytes=724472
sun.cls.nonSystemLoaderLockContentionRate=0
sun.cls.parseClassTime=313994
sun.cls.parseClassTime.self=286994
sun.cls.sharedClassLoadTime=133
sun.cls.sharedLoadedBytes=0
sun.cls.sharedUnloadedBytes=0
sun.cls.sysClassBytes=2076359
sun.cls.sysClassLoadTime=565974
sun.cls.systemLoaderLockContentionRate=0
sun.cls.time=2487254
sun.cls.unloadedBytes=0
sun.cls.unsafeDefineClassCalls=0
sun.cls.verifiedClasses=491
sun.gc.cause="No GC"
sun.gc.collector.0.invocations=1320
sun.gc.collector.0.lastEntryTime=21395238427
sun.gc.collector.0.lastExitTime=21395241219
sun.gc.collector.0.name="PSScavenge"
sun.gc.collector.0.time=3974326
sun.gc.collector.1.invocations=0
sun.gc.collector.1.lastEntryTime=0
sun.gc.collector.1.lastExitTime=0
sun.gc.collector.1.name="PSParallelCompact"
sun.gc.collector.1.time=0
sun.gc.compressedclassspace.capacity=524288
sun.gc.compressedclassspace.maxCapacity=1073741824
sun.gc.compressedclassspace.minCapacity=0
sun.gc.compressedclassspace.used=375712
sun.gc.generation.0.capacity=63438848
sun.gc.generation.0.maxCapacity=1421869056
sun.gc.generation.0.minCapacity=89128960
sun.gc.generation.0.name="new"
sun.gc.generation.0.space.0.capacity=31981568
sun.gc.generation.0.space.0.initCapacity=0
sun.gc.generation.0.space.0.maxCapacity=1420820480
sun.gc.generation.0.space.0.name="eden"
sun.gc.generation.0.space.0.used=26864592
sun.gc.generation.0.space.1.capacity=524288
sun.gc.generation.0.space.1.initCapacity=0
sun.gc.generation.0.space.1.maxCapacity=473956352
sun.gc.generation.0.space.1.name="s0"
sun.gc.generation.0.space.1.used=0
sun.gc.generation.0.space.2.capacity=524288
sun.gc.generation.0.space.2.initCapacity=0
sun.gc.generation.0.space.2.maxCapacity=473956352
sun.gc.generation.0.space.2.name="s1"
sun.gc.generation.0.space.2.used=0
sun.gc.generation.0.spaces=3
sun.gc.generation.1.capacity=179306496
sun.gc.generation.1.maxCapacity=2843738112
sun.gc.generation.1.minCapacity=179306496
sun.gc.generation.1.name="old"
sun.gc.generation.1.space.0.capacity=179306496
sun.gc.generation.1.space.0.initCapacity=179306496
sun.gc.generation.1.space.0.maxCapacity=2843738112
sun.gc.generation.1.space.0.name="old"
sun.gc.generation.1.space.0.used=1007688
sun.gc.generation.1.spaces=1
sun.gc.lastCause="Allocation Failure"
sun.gc.metaspace.capacity=4980736
sun.gc.metaspace.maxCapacity=1082130432
sun.gc.metaspace.minCapacity=0
sun.gc.metaspace.used=3524208
sun.gc.policy.avgBaseFootprint=268435456
sun.gc.policy.avgMajorIntervalTime=0
sun.gc.policy.avgMajorPauseTime=0
sun.gc.policy.avgMinorIntervalTime=1513
sun.gc.policy.avgMinorPauseTime=0
sun.gc.policy.avgOldLive=0
sun.gc.policy.avgPretenuredPaddedAvg=0
sun.gc.policy.avgPromotedAvg=0
sun.gc.policy.avgPromotedDev=119019
sun.gc.policy.avgPromotedPaddedAvg=357059
sun.gc.policy.avgSurvivedAvg=0
sun.gc.policy.avgSurvivedDev=0
sun.gc.policy.avgSurvivedPaddedAvg=0
sun.gc.policy.avgYoungLive=0
sun.gc.policy.boundaryMoved=0
sun.gc.policy.changeOldGenForMajPauses=0
sun.gc.policy.changeOldGenForMinPauses=0
sun.gc.policy.changeYoungGenForMajPauses=0
sun.gc.policy.changeYoungGenForMinPauses=0
sun.gc.policy.collectors=2
sun.gc.policy.decideAtFullGc=0
sun.gc.policy.decreaseForFootprint=6
sun.gc.policy.decrementTenuringThresholdForGcCost=1
sun.gc.policy.decrementTenuringThresholdForSurvivorLimit=0
sun.gc.policy.desiredSurvivorSize=524288
sun.gc.policy.edenSize=31981568
sun.gc.policy.freeSpace=99090432
sun.gc.policy.fullFollowsScavenge=0
sun.gc.policy.gcTimeLimitExceeded=0
sun.gc.policy.generations=3
sun.gc.policy.increaseOldGenForThroughput=0
sun.gc.policy.increaseYoungGenForThroughput=0
sun.gc.policy.incrementTenuringThresholdForGcCost=0
sun.gc.policy.liveAtLastFullGc=67108864
sun.gc.policy.liveSpace=268435456
sun.gc.policy.majorCollectionSlope=0
sun.gc.policy.majorGcCost=0
sun.gc.policy.majorPauseOldSlope=0
sun.gc.policy.majorPauseYoungSlope=0
sun.gc.policy.maxTenuringThreshold=15
sun.gc.policy.minorCollectionSlope=0
sun.gc.policy.minorGcCost=0
sun.gc.policy.minorPauseOldSlope=0
sun.gc.policy.minorPauseTime=0
sun.gc.policy.minorPauseYoungSlope=8
sun.gc.policy.mutatorCost=99
sun.gc.policy.name="ParScav:MSC"
sun.gc.policy.oldCapacity=179306496
sun.gc.policy.oldEdenSize=31981568
sun.gc.policy.oldPromoSize=67108864
sun.gc.policy.promoSize=67108864
sun.gc.policy.promoted=0
sun.gc.policy.scavengeSkipped=0
sun.gc.policy.survived=0
sun.gc.policy.survivorOverflowed=0
sun.gc.policy.tenuringThreshold=1
sun.gc.policy.youngCapacity=32505856
sun.gc.tlab.alloc=3997450
sun.gc.tlab.allocThreads=1
sun.gc.tlab.fastWaste=0
sun.gc.tlab.fills=50
sun.gc.tlab.gcWaste=0
sun.gc.tlab.maxFastWaste=0
sun.gc.tlab.maxFills=50
sun.gc.tlab.maxGcWaste=0
sun.gc.tlab.maxSlowAlloc=0
sun.gc.tlab.maxSlowWaste=250
sun.gc.tlab.slowAlloc=0
sun.gc.tlab.slowWaste=250
sun.os.hrt.frequency=10000000
sun.os.hrt.ticks=21408474899
sun.perfdata.majorVersion=2
sun.perfdata.minorVersion=0
sun.perfdata.overflow=0
sun.perfdata.size=65536
sun.perfdata.timestamp=4895031
sun.perfdata.used=19408
sun.property.sun.boot.class.path="C:\Program Files\Java\jdk1.8.0_121\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\rt.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_121\jre\classes"
sun.property.sun.boot.library.path="C:\Program Files\Java\jdk1.8.0_121\jre\bin"
sun.rt._sync_ContendedLockAttempts=0
sun.rt._sync_Deflations=3
sun.rt._sync_EmptyNotifications=0
sun.rt._sync_FailedSpins=0
sun.rt._sync_FutileWakeups=0
sun.rt._sync_Inflations=5
sun.rt._sync_MonExtant=128
sun.rt._sync_MonInCirculation=0
sun.rt._sync_MonScavenged=0
sun.rt._sync_Notifications=6
sun.rt._sync_Parks=7
sun.rt._sync_PrivateA=0
sun.rt._sync_PrivateB=0
sun.rt._sync_SlowEnter=0
sun.rt._sync_SlowExit=0
sun.rt._sync_SlowNotify=0
sun.rt._sync_SlowNotifyAll=0
sun.rt._sync_SuccessfulSpins=0
sun.rt.applicationTime=21385682886
sun.rt.createVmBeginTime=1634548485527
sun.rt.createVmEndTime=1634548486024
sun.rt.internalVersion="Java HotSpot(TM) 64-Bit Server VM (25.121-b13) for windows-amd64 JRE (1.8.0_121-b13), built on Dec 12 2016 18:21:36 by "java_re" with MS VC++ 10.0 (VS2010)"
sun.rt.interruptedBeforeIO=0
sun.rt.interruptedDuringIO=0
sun.rt.javaCommand="com.ideas.trucks.memory.MyTest5"
sun.rt.jvmCapabilities="1100000000000000000000000000000000000000000000000000000000000000"
sun.rt.jvmVersion=427360269
sun.rt.safepointSyncTime=301931
sun.rt.safepointTime=5256379
sun.rt.safepoints=1326
sun.rt.threadInterruptSignaled=0
sun.rt.vmInitDoneTime=1634548485702
sun.threads.vmOperationTime=4730030
sun.urlClassLoader.readClassBytesTime=14607200
sun.zip.zipFile.openTime=46555500
sun.zip.zipFiles=100

6.2.5、输出Java进程启动的时长

命令:jcmd pid VM.uptime

24652:
2254.583 s

6.2.6、输出Java进程中类的统计信息

命令:jcmd pid GC.class_histogram

24652:num     #instances         #bytes  class name
----------------------------------------------1:          3406         504368  [C2:          3261          78264  java.lang.String3:           619          70792  java.lang.Class4:           685          42728  [Ljava.lang.Object;5:           843          33720  java.util.TreeMap$Entry6:           139          29176  [B7:           247          15808  java.net.URL8:           350          11200  java.util.HashMap$Node9:            90           8640  java.util.jar.JarFile$JarFileEntry10:           208           8320  java.util.LinkedHashMap$Entry11:           201           8168  [Ljava.lang.String;12:           102           8160  [Ljava.util.WeakHashMap$Entry;13:           190           7600  java.lang.ref.Finalizer14:           123           6888  sun.misc.URLClassPath$JarLoader15:            99           6336  java.util.jar.JarFile16:            29           5840  [Ljava.util.HashMap$Node;17:           102           5712  sun.nio.cs.UTF_8$Encoder18:            79           5688  java.lang.reflect.Field19:           230           5520  java.util.LinkedList$Node20:           121           5240  [I21:           208           4992  java.io.ExpiringCache$Entry22:           102           4896  java.util.WeakHashMap23:           151           4832  java.util.Hashtable$Entry24:           137           4384  java.util.concurrent.ConcurrentHashMap$Node25:            86           4128  java.util.zip.Inflater26:           256           4096  java.lang.Integer27:           100           4000  java.lang.ref.SoftReference28:           120           3840  java.util.LinkedList29:            10           3760  java.lang.Thread30:           107           3424  java.lang.ref.ReferenceQueue31:            99           3168  java.util.zip.ZipCoder32:            99           2376  java.util.ArrayDeque33:            86           2064  java.util.zip.ZStreamRef34:           122           1952  java.lang.Object35:            38           1824  sun.util.locale.LocaleObjectCache$CacheEntry36:           109           1744  java.lang.ref.ReferenceQueue$Lock37:            35           1680  java.util.HashMap38:            19           1672  java.lang.reflect.Method39:            18           1440  java.lang.reflect.Constructor40:             5           1424  [Ljava.util.concurrent.ConcurrentHashMap$Node;41:             8           1264  [Ljava.util.Hashtable$Entry;42:            20           1120  java.lang.Class$ReflectionData43:             2           1064  [Ljava.lang.invoke.MethodHandle;44:             1           1040  [Ljava.lang.Integer;45:             1           1040  [[C46:            26           1040  java.io.ObjectStreamField47:            27            864  com.intellij.rt.debugger.agent.CaptureAgent$InstrumentPoint48:            19            760  sun.util.locale.BaseLocale$Key49:             8            640  [S50:            29            624  [Ljava.lang.Class;51:            19            608  java.util.Locale52:            19            608  sun.util.locale.BaseLocale53:            24            576  java.util.ArrayList54:            14            560  java.security.AccessControlContext55:             8            512  java.util.concurrent.ConcurrentHashMap56:            20            480  java.util.jar.Attributes$Name57:             8            456  [Ljava.lang.reflect.Field;58:            19            456  java.util.Locale$LocaleKey59:            13            416  java.io.File60:             1            384  java.lang.ref.Finalizer$FinalizerThread61:             6            384  java.nio.DirectByteBuffer62:             1            376  java.lang.ref.Reference$ReferenceHandler63:             6            336  java.nio.DirectLongBufferU64:            10            320  java.lang.OutOfMemoryError65:            10            288  [Ljava.io.ObjectStreamField;66:            12            288  sun.misc.MetaIndex67:             7            280  java.util.WeakHashMap$Entry68:            10            240  java.security.CryptoPrimitive69:             5            240  java.util.TreeMap70:             7            224  java.nio.file.attribute.FileTime71:             9            216  [Ljava.lang.reflect.Constructor;72:             3            216  java.util.regex.Pattern73:             9            216  sun.reflect.NativeConstructorAccessorImpl74:             4            192  java.util.Hashtable75:             4            192  java.util.Properties76:             6            192  java.util.Vector77:             3            168  java.lang.Package78:             4            160  java.security.ProtectionDomain79:             6            144  sun.misc.PerfCounter80:             9            144  sun.reflect.DelegatingConstructorAccessorImpl81:             6            144  sun.security.util.DisabledAlgorithmConstraints$Constraint$Operator82:             2            128  java.io.ExpiringCache$183:             4            128  java.security.CodeSource84:             3            120  [Ljava.lang.reflect.Method;85:             3            120  java.io.FileDescriptor86:             5            120  java.util.regex.Pattern$Slice87:             5            120  sun.misc.JarIndex88:             2            112  [Ljava.security.CryptoPrimitive;89:             4             96  java.lang.RuntimePermission90:             2             96  java.lang.ThreadGroup91:             3             96  java.lang.ThreadLocal$ThreadLocalMap$Entry92:             2             96  java.nio.HeapByteBuffer93:             3             96  java.util.Stack94:             3             96  java.util.regex.Pattern$Curly95:             1             96  sun.misc.Launcher$AppClassLoader96:             2             96  sun.misc.URLClassPath97:             2             96  sun.nio.cs.StreamEncoder98:             1             88  sun.misc.Launcher$ExtClassLoader99:             1             80  [Ljava.lang.ThreadLocal$ThreadLocalMap$Entry;100:             2             80  java.io.BufferedWriter101:             2             80  java.io.ExpiringCache102:             2             80  java.lang.ClassLoader$NativeLibrary103:             5             80  java.lang.ThreadLocal104:             2             72  [Ljava.util.regex.Pattern$Node;105:             3             72  java.util.Collections$SynchronizedSet106:             3             72  java.util.concurrent.atomic.AtomicLong107:             3             72  java.util.regex.Pattern$Ctype108:             3             72  java.util.regex.Pattern$Single109:             2             64  [Ljava.lang.Thread;110:             4             64  [Ljava.security.Principal;111:             2             64  java.io.FileOutputStream112:             2             64  java.io.FilePermission113:             2             64  java.io.PrintStream114:             2             64  java.lang.ClassValue$Entry115:             2             64  java.lang.VirtualMachineError116:             2             64  java.lang.ref.ReferenceQueue$Null117:             2             64  java.security.BasicPermissionCollection118:             2             64  java.security.Permissions119:             4             64  java.security.ProtectionDomain$Key120:             4             64  java.util.HashSet121:             2             64  java.util.regex.Pattern$Branch122:             1             56  sun.nio.cs.ext.DoubleByte$Decoder123:             1             48  [J124:             1             48  [Ljava.util.concurrent.TimeUnit;125:             2             48  java.io.BufferedOutputStream126:             2             48  java.io.File$PathStatus127:             2             48  java.io.FilePermissionCollection128:             2             48  java.io.OutputStreamWriter129:             1             48  java.lang.ProcessEnvironment130:             2             48  java.nio.charset.CoderResult131:             3             48  java.nio.charset.CodingErrorAction132:             2             48  java.util.regex.Pattern$GroupHead133:             2             48  java.util.regex.Pattern$GroupTail134:             2             48  java.util.regex.Pattern$SliceI135:             2             48  java.util.regex.Pattern$Start136:             2             48  sun.instrument.TransformerManager137:             2             48  sun.misc.NativeSignalHandler138:             2             48  sun.misc.Signal139:             2             48  sun.reflect.NativeMethodAccessorImpl140:             2             40  [Lsun.instrument.TransformerManager$TransformerInfo;141:             1             40  [Lsun.security.util.DisabledAlgorithmConstraints$Constraint$Operator;142:             1             40  java.io.BufferedInputStream143:             1             40  sun.nio.cs.StandardCharsets$Aliases144:             1             40  sun.nio.cs.StandardCharsets$Cache145:             1             40  sun.nio.cs.StandardCharsets$Classes146:             1             40  sun.nio.cs.UTF_8$Decoder147:             1             40  sun.nio.cs.ext.ExtendedCharsets148:             1             32  [Ljava.lang.OutOfMemoryError;149:             2             32  [Ljava.lang.StackTraceElement;150:             1             32  [Ljava.lang.ThreadGroup;151:             2             32  com.intellij.rt.debugger.agent.CaptureAgent$ParamKeyProvider152:             1             32  java.io.FileInputStream153:             1             32  java.io.WinNTFileSystem154:             1             32  java.lang.ArithmeticException155:             2             32  java.lang.Boolean156:             1             32  java.lang.NullPointerException157:             1             32  java.lang.StringCoding$StringDecoder158:             1             32  java.lang.StringCoding$StringEncoder159:             2             32  java.nio.ByteOrder160:             1             32  java.util.Collections$UnmodifiableMap161:             1             32  java.util.RegularEnumSet162:             2             32  java.util.concurrent.atomic.AtomicInteger163:             1             32  java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl164:             1             32  java.util.regex.Pattern$BnM165:             2             32  java.util.regex.Pattern$BranchConn166:             1             32  sun.instrument.InstrumentationImpl167:             2             32  sun.net.www.protocol.jar.Handler168:             1             32  sun.nio.cs.StandardCharsets169:             2             32  sun.reflect.DelegatingMethodAccessorImpl170:             1             32  sun.security.util.DisabledAlgorithmConstraints$KeySizeConstraint171:             1             24  [Ljava.io.File$PathStatus;172:             1             24  [Ljava.lang.ClassValue$Entry;173:             1             24  [Lsun.launcher.LauncherHelper;174:             1             24  com.intellij.rt.debugger.agent.CaptureAgent$FieldKeyProvider175:             1             24  java.lang.ClassValue$Version176:             1             24  java.lang.StringBuilder177:             1             24  java.lang.ThreadLocal$ThreadLocalMap178:             1             24  java.lang.invoke.MethodHandleImpl$4179:             1             24  java.lang.reflect.ReflectPermission180:             1             24  java.util.BitSet181:             1             24  java.util.Collections$EmptyMap182:             1             24  java.util.Collections$SetFromMap183:             1             24  java.util.Collections$UnmodifiableRandomAccessList184:             1             24  java.util.Locale$Cache185:             1             24  java.util.concurrent.TimeUnit$1186:             1             24  java.util.concurrent.TimeUnit$2187:             1             24  java.util.concurrent.TimeUnit$3188:             1             24  java.util.concurrent.TimeUnit$4189:             1             24  java.util.concurrent.TimeUnit$5190:             1             24  java.util.concurrent.TimeUnit$6191:             1             24  java.util.concurrent.TimeUnit$7192:             1             24  java.util.jar.Manifest193:             1             24  sun.instrument.TransformerManager$TransformerInfo194:             1             24  sun.launcher.LauncherHelper195:             1             24  sun.misc.URLClassPath$FileLoader196:             1             24  sun.nio.cs.ISO_8859_1197:             1             24  sun.nio.cs.ThreadLocalCoders$1198:             1             24  sun.nio.cs.ThreadLocalCoders$2199:             1             24  sun.nio.cs.US_ASCII200:             1             24  sun.nio.cs.UTF_16201:             1             24  sun.nio.cs.UTF_16BE202:             1             24  sun.nio.cs.UTF_16LE203:             1             24  sun.nio.cs.UTF_8204:             1             24  sun.nio.cs.ext.GBK205:             1             24  sun.security.util.DisabledAlgorithmConstraints206:             1             24  sun.util.locale.BaseLocale$Cache207:             1             16  [Ljava.lang.Enum;208:             1             16  [Ljava.lang.Throwable;209:             1             16  [Ljava.security.cert.Certificate;210:             1             16  com.intellij.rt.debugger.agent.CaptureAgent$1211:             1             16  com.intellij.rt.debugger.agent.CaptureAgent$CaptureTransformer212:             1             16  com.intellij.rt.debugger.agent.CaptureStorage$1213:             1             16  java.io.FileDescriptor$1214:             1             16  java.lang.CharacterDataLatin1215:             1             16  java.lang.ClassValue$Identity216:             1             16  java.lang.ProcessEnvironment$EntryComparator217:             1             16  java.lang.ProcessEnvironment$NameComparator218:             1             16  java.lang.Runtime219:             1             16  java.lang.String$CaseInsensitiveComparator220:             1             16  java.lang.System$2221:             1             16  java.lang.Terminator$1222:             1             16  java.lang.invoke.MemberName$Factory223:             1             16  java.lang.invoke.MethodHandleImpl$2224:             1             16  java.lang.invoke.MethodHandleImpl$3225:             1             16  java.lang.ref.Reference$1226:             1             16  java.lang.ref.Reference$Lock227:             1             16  java.lang.reflect.ReflectAccess228:             1             16  java.net.URLClassLoader$7229:             1             16  java.nio.Bits$1230:             1             16  java.nio.charset.CoderResult$1231:             1             16  java.nio.charset.CoderResult$2232:             1             16  java.security.ProtectionDomain$2233:             1             16  java.security.ProtectionDomain$JavaSecurityAccessImpl234:             1             16  java.util.Collections$EmptyList235:             1             16  java.util.Collections$EmptySet236:             1             16  java.util.Collections$UnmodifiableSet237:             1             16  java.util.HashMap$EntrySet238:             1             16  java.util.Hashtable$EntrySet239:             1             16  java.util.WeakHashMap$KeySet240:             1             16  java.util.concurrent.atomic.AtomicBoolean241:             1             16  java.util.jar.Attributes242:             1             16  java.util.jar.JavaUtilJarAccessImpl243:             1             16  java.util.regex.Pattern$4244:             1             16  java.util.regex.Pattern$LastNode245:             1             16  java.util.regex.Pattern$Node246:             1             16  java.util.zip.ZipFile$1247:             1             16  sun.misc.ASCIICaseInsensitiveComparator248:             1             16  sun.misc.Launcher249:             1             16  sun.misc.Launcher$Factory250:             1             16  sun.misc.Perf251:             1             16  sun.misc.Unsafe252:             1             16  sun.net.www.protocol.file.Handler253:             1             16  sun.reflect.ReflectionFactory254:             1             16  sun.security.util.AlgorithmDecomposer255:             1             16  sun.security.util.DisabledAlgorithmConstraints$Constraints
Total         13717         956304

6.2.7、输出线程的堆栈信息

命令:jcmd pid Thread.print

24652:
2021-10-18 17:56:31
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.121-b13 mixed mode):"Service Thread" #12 daemon prio=9 os_prio=0 tid=0x000000001e7f7000 nid=0x379c runnable [0x0000000000000000]java.lang.Thread.State: RUNNABLE"C1 CompilerThread2" #11 daemon prio=9 os_prio=2 tid=0x000000001e785000 nid=0x1154 waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLE"C2 CompilerThread1" #10 daemon prio=9 os_prio=2 tid=0x000000001e784000 nid=0x4ae0 waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLE"C2 CompilerThread0" #9 daemon prio=9 os_prio=2 tid=0x000000001e781800 nid=0x43b8 waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLE"JDWP Command Reader" #8 daemon prio=10 os_prio=0 tid=0x000000001ca60000 nid=0x1b40 runnable [0x0000000000000000]java.lang.Thread.State: RUNNABLE"JDWP Event Helper Thread" #7 daemon prio=10 os_prio=0 tid=0x000000001ca5c800 nid=0x4d94 runnable [0x0000000000000000]java.lang.Thread.State: RUNNABLE"JDWP Transport Listener: dt_socket" #6 daemon prio=10 os_prio=0 tid=0x000000001ca4e800 nid=0x4e2c runnable [0x0000000000000000]java.lang.Thread.State: RUNNABLE"Attach Listener" #5 daemon prio=5 os_prio=2 tid=0x000000001de23000 nid=0x57ac waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLE"Signal Dispatcher" #4 daemon prio=9 os_prio=2 tid=0x000000001ca35800 nid=0x6770 runnable [0x0000000000000000]java.lang.Thread.State: RUNNABLE"Finalizer" #3 daemon prio=8 os_prio=1 tid=0x000000001ca10000 nid=0x66bc in Object.wait() [0x000000001dd7e000]java.lang.Thread.State: WAITING (on object monitor)at java.lang.Object.wait(Native Method)- waiting on <0x00000006c1c00f60> (a java.lang.ref.ReferenceQueue$Lock)at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)- locked <0x00000006c1c00f60> (a java.lang.ref.ReferenceQueue$Lock)at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)"Reference Handler" #2 daemon prio=10 os_prio=2 tid=0x000000001c9e9000 nid=0x32f4 in Object.wait() [0x000000001dc7f000]java.lang.Thread.State: WAITING (on object monitor)at java.lang.Object.wait(Native Method)- waiting on <0x00000006c1c04428> (a java.lang.ref.Reference$Lock)at java.lang.Object.wait(Object.java:502)at java.lang.ref.Reference.tryHandlePending(Reference.java:191)- locked <0x00000006c1c04428> (a java.lang.ref.Reference$Lock)at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153)"main" #1 prio=5 os_prio=0 tid=0x00000000031f7000 nid=0x162c runnable [0x00000000031de000]java.lang.Thread.State: RUNNABLEat java.io.FileOutputStream.writeBytes(Native Method)at java.io.FileOutputStream.write(FileOutputStream.java:326)at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)- locked <0x00000006c1c03c28> (a java.io.BufferedOutputStream)at java.io.PrintStream.write(PrintStream.java:482)- locked <0x00000006c1c034e0> (a java.io.PrintStream)at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)at sun.nio.cs.StreamEncoder.flushBuffer(StreamEncoder.java:104)- locked <0x00000006c1c034a0> (a java.io.OutputStreamWriter)at java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java:185)at java.io.PrintStream.write(PrintStream.java:527)- eliminated <0x00000006c1c034e0> (a java.io.PrintStream)at java.io.PrintStream.print(PrintStream.java:669)at java.io.PrintStream.println(PrintStream.java:806)- locked <0x00000006c1c034e0> (a java.io.PrintStream)at com.ideas.trucks.memory.MyTest5.main(MyTest5.java:13)"VM Thread" os_prio=2 tid=0x000000001c9e7000 nid=0x7dc runnable"GC task thread#0 (ParallelGC)" os_prio=0 tid=0x000000000320c800 nid=0x46ec runnable"GC task thread#1 (ParallelGC)" os_prio=0 tid=0x000000000320e000 nid=0x5b44 runnable"GC task thread#2 (ParallelGC)" os_prio=0 tid=0x000000000320f800 nid=0x4958 runnable"GC task thread#3 (ParallelGC)" os_prio=0 tid=0x0000000003212000 nid=0x5c04 runnable"VM Periodic Task Thread" os_prio=2 tid=0x000000001e8b2800 nid=0x4374 waiting on conditionJNI global references: 1729

6.2.8、导出Java进程堆信息

命令:jcmd pid GC.heap_dump <filename>

C:\Users\liuyu>jcmd 24652 GC.heap_dump c:\Users\liuyu\Desktop\test.hprof
24652:
Heap dump file created

6.2.9、导出Java进程堆信息

命令:jcmd pid GC.heap_dump <filename>,导出的文件可以通过jvisualvm查看

C:\Users\liuyu>jcmd 24652 GC.heap_dump c:\Users\liuyu\Desktop\test.hprof
24652:
Heap dump file created

6.2.10、查看JVM的属性信息

命令:jcmd pid VM.system_properties

24652:
#Mon Oct 18 18:38:17 CST 2021
java.runtime.name=Java(TM) SE Runtime Environment
sun.boot.library.path=C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\bin
java.vm.version=25.121-b13
java.vm.vendor=Oracle Corporation
java.vendor.url=http\://java.oracle.com/
path.separator=;
java.vm.name=Java HotSpot(TM) 64-Bit Server VM
file.encoding.pkg=sun.io
user.script=
user.country=CN
sun.java.launcher=SUN_STANDARD
sun.os.patch.level=
java.vm.specification.name=Java Virtual Machine Specification
user.dir=E\:\\idea_workspace\\trucks
intellij.debug.agent=true
java.runtime.version=1.8.0_121-b13
java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
java.endorsed.dirs=C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\lib\\endorsed
os.arch=amd64
java.io.tmpdir=C\:\\Users\\IDEASS~1\\AppData\\Local\\Temp\\
line.separator=\r\n
java.vm.specification.vendor=Oracle Corporation
user.variant=
os.name=Windows 10
sun.jnu.encoding=GBK
java.library.path=C\:\\Program Files\\Java\\jdk1.8.0_121\\bin;C\:\\Windows\\Sun\\Java\\bin;C\:\\Windows\\system32;C\:\\Windows;C\:\\ProgramData\\Oracle\\Java\\javapath;C\:\\Windows\\system32;C\:\\Windows;C\:\\Windows\\System32\\Wbem;C\:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;C\:\\Windows\\System32\\OpenSSH\\;D\:\\Flutter\\Git\\Git\\bin;D\:\\Flutter\\flutter\\flutter\\bin;C\:\\Program Files\\Java\\jdk1.8.0_121\\bin;C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\bin;%CATALINA_HOME%\\lib;%CATALINA_HOME%\\bin;D\:\\node\\node_modules;D\:\\FFmpeg\\ffmpeg-4.1.3-win64-static\\bin;D\:\\node;C\:\\Users\\ideassoft\\AppData\\Local\\Programs\\Python\\Python37;D\:\\node\\node_global;D\:\\apache-maven-3.6.1\\bin;C\:\\Program Files (x86)\\MySQL\\MySQL Server 5.5\\bin;C\:\\Program Files\\TortoiseSVN\\bin;C\:\\Program Files\\MySQL\\MySQL Server 5.5\\bin;D\:\\nodejs\\;D\:\\Git\\cmd;D\:\\py\\Scripts\\;D\:\\py\\;C\:\\Users\\ideassoft\\AppData\\Local\\Programs\\Python\\Python37\\Scripts\\;C\:\\Users\\ideassoft\\AppData\\Local\\Programs\\Python\\Python37\\;C\:\\Users\\ideassoft\\AppData\\Local\\Microsoft\\WindowsApps;D\:\\nodejs\\node_global;D\:\\apache-maven-3.6.3\\bin\\;D\:\\Android\\flutter\\bin;D\:\\Git\\bin;;D\:\\Fiddler;.
jboss.modules.system.pkgs=com.intellij.rt
java.specification.name=Java Platform API Specification
java.class.version=52.0
sun.management.compiler=HotSpot 64-Bit Tiered Compilers
os.version=10.0
user.home=C\:\\Users\\ideassoft
user.timezone=
java.awt.printerjob=sun.awt.windows.WPrinterJob
file.encoding=UTF-8
java.specification.version=1.8
java.class.path=C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\lib\\charsets.jar;C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\lib\\deploy.jar;C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\lib\\ext\\access-bridge-64.jar;C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\lib\\ext\\cldrdata.jar;C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\lib\\ext\\dnsns.jar;C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\lib\\ext\\jaccess.jar;C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\lib\\ext\\jfxrt.jar;C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\lib\\ext\\localedata.jar;C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\lib\\ext\\nashorn.jar;C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\lib\\ext\\sunec.jar;C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\lib\\ext\\sunjce_provider.jar;C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\lib\\ext\\sunmscapi.jar;C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\lib\\ext\\sunpkcs11.jar;C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\lib\\ext\\zipfs.jar;C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\lib\\javaws.jar;C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\lib\\jce.jar;C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\lib\\jfr.jar;C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\lib\\jfxswt.jar;C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\lib\\jsse.jar;C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\lib\\management-agent.jar;C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\lib\\plugin.jar;C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\lib\\resources.jar;C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\lib\\rt.jar;E\:\\idea_workspace\\trucks\\target\\classes;C\:\\Users\\ideassoft\\.m2\\repository\\org\\springframework\\boot\\spring-boot-starter-data-jpa\\2.5.0\\spring-boot-starter-data-jpa-2.5.0.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\springframework\\boot\\spring-boot-starter-aop\\2.5.0\\spring-boot-starter-aop-2.5.0.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\springframework\\spring-aop\\5.3.7\\spring-aop-5.3.7.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\aspectj\\aspectjweaver\\1.9.6\\aspectjweaver-1.9.6.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\springframework\\boot\\spring-boot-starter-jdbc\\2.5.0\\spring-boot-starter-jdbc-2.5.0.jar;C\:\\Users\\ideassoft\\.m2\\repository\\com\\zaxxer\\HikariCP\\4.0.3\\HikariCP-4.0.3.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\springframework\\spring-jdbc\\5.3.7\\spring-jdbc-5.3.7.jar;C\:\\Users\\ideassoft\\.m2\\repository\\jakarta\\transaction\\jakarta.transaction-api\\1.3.3\\jakarta.transaction-api-1.3.3.jar;C\:\\Users\\ideassoft\\.m2\\repository\\jakarta\\persistence\\jakarta.persistence-api\\2.2.3\\jakarta.persistence-api-2.2.3.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\hibernate\\hibernate-core\\5.4.31.Final\\hibernate-core-5.4.31.Final.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\jboss\\logging\\jboss-logging\\3.4.1.Final\\jboss-logging-3.4.1.Final.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\javassist\\javassist\\3.27.0-GA\\javassist-3.27.0-GA.jar;C\:\\Users\\ideassoft\\.m2\\repository\\net\\bytebuddy\\byte-buddy\\1.10.22\\byte-buddy-1.10.22.jar;C\:\\Users\\ideassoft\\.m2\\repository\\antlr\\antlr\\2.7.7\\antlr-2.7.7.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\jboss\\jandex\\2.2.3.Final\\jandex-2.2.3.Final.jar;C\:\\Users\\ideassoft\\.m2\\repository\\com\\fasterxml\\classmate\\1.5.1\\classmate-1.5.1.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\dom4j\\dom4j\\2.1.3\\dom4j-2.1.3.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\hibernate\\common\\hibernate-commons-annotations\\5.1.2.Final\\hibernate-commons-annotations-5.1.2.Final.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\glassfish\\jaxb\\jaxb-runtime\\2.3.4\\jaxb-runtime-2.3.4.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\glassfish\\jaxb\\txw2\\2.3.4\\txw2-2.3.4.jar;C\:\\Users\\ideassoft\\.m2\\repository\\com\\sun\\istack\\istack-commons-runtime\\3.0.12\\istack-commons-runtime-3.0.12.jar;C\:\\Users\\ideassoft\\.m2\\repository\\com\\sun\\activation\\jakarta.activation\\1.2.2\\jakarta.activation-1.2.2.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\springframework\\data\\spring-data-jpa\\2.5.1\\spring-data-jpa-2.5.1.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\springframework\\data\\spring-data-commons\\2.5.1\\spring-data-commons-2.5.1.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\springframework\\spring-orm\\5.3.7\\spring-orm-5.3.7.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\springframework\\spring-context\\5.3.7\\spring-context-5.3.7.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\springframework\\spring-tx\\5.3.7\\spring-tx-5.3.7.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\springframework\\spring-beans\\5.3.7\\spring-beans-5.3.7.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\slf4j\\slf4j-api\\1.7.30\\slf4j-api-1.7.30.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\springframework\\spring-aspects\\5.3.7\\spring-aspects-5.3.7.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\springframework\\boot\\spring-boot-starter-web\\2.5.0\\spring-boot-starter-web-2.5.0.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\springframework\\boot\\spring-boot-starter\\2.5.0\\spring-boot-starter-2.5.0.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\springframework\\boot\\spring-boot-starter-logging\\2.5.0\\spring-boot-starter-logging-2.5.0.jar;C\:\\Users\\ideassoft\\.m2\\repository\\ch\\qos\\logback\\logback-classic\\1.2.3\\logback-classic-1.2.3.jar;C\:\\Users\\ideassoft\\.m2\\repository\\ch\\qos\\logback\\logback-core\\1.2.3\\logback-core-1.2.3.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\apache\\logging\\log4j\\log4j-to-slf4j\\2.14.1\\log4j-to-slf4j-2.14.1.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\apache\\logging\\log4j\\log4j-api\\2.14.1\\log4j-api-2.14.1.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\slf4j\\jul-to-slf4j\\1.7.30\\jul-to-slf4j-1.7.30.jar;C\:\\Users\\ideassoft\\.m2\\repository\\jakarta\\annotation\\jakarta.annotation-api\\1.3.5\\jakarta.annotation-api-1.3.5.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\yaml\\snakeyaml\\1.28\\snakeyaml-1.28.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\springframework\\boot\\spring-boot-starter-json\\2.5.0\\spring-boot-starter-json-2.5.0.jar;C\:\\Users\\ideassoft\\.m2\\repository\\com\\fasterxml\\jackson\\core\\jackson-databind\\2.12.3\\jackson-databind-2.12.3.jar;C\:\\Users\\ideassoft\\.m2\\repository\\com\\fasterxml\\jackson\\core\\jackson-annotations\\2.12.3\\jackson-annotations-2.12.3.jar;C\:\\Users\\ideassoft\\.m2\\repository\\com\\fasterxml\\jackson\\core\\jackson-core\\2.12.3\\jackson-core-2.12.3.jar;C\:\\Users\\ideassoft\\.m2\\repository\\com\\fasterxml\\jackson\\datatype\\jackson-datatype-jdk8\\2.12.3\\jackson-datatype-jdk8-2.12.3.jar;C\:\\Users\\ideassoft\\.m2\\repository\\com\\fasterxml\\jackson\\datatype\\jackson-datatype-jsr310\\2.12.3\\jackson-datatype-jsr310-2.12.3.jar;C\:\\Users\\ideassoft\\.m2\\repository\\com\\fasterxml\\jackson\\module\\jackson-module-parameter-names\\2.12.3\\jackson-module-parameter-names-2.12.3.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\springframework\\boot\\spring-boot-starter-tomcat\\2.5.0\\spring-boot-starter-tomcat-2.5.0.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\apache\\tomcat\\embed\\tomcat-embed-core\\9.0.46\\tomcat-embed-core-9.0.46.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\apache\\tomcat\\embed\\tomcat-embed-el\\9.0.46\\tomcat-embed-el-9.0.46.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\apache\\tomcat\\embed\\tomcat-embed-websocket\\9.0.46\\tomcat-embed-websocket-9.0.46.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\springframework\\spring-web\\5.3.7\\spring-web-5.3.7.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\springframework\\spring-webmvc\\5.3.7\\spring-webmvc-5.3.7.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\springframework\\spring-expression\\5.3.7\\spring-expression-5.3.7.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\springframework\\experimental\\spring-native\\0.10.0-SNAPSHOT\\spring-native-0.10.0-20210614.093418-63.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\springframework\\boot\\spring-boot-devtools\\2.5.0\\spring-boot-devtools-2.5.0.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\springframework\\boot\\spring-boot\\2.5.0\\spring-boot-2.5.0.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\springframework\\boot\\spring-boot-autoconfigure\\2.5.0\\spring-boot-autoconfigure-2.5.0.jar;C\:\\Users\\ideassoft\\.m2\\repository\\mysql\\mysql-connector-java\\8.0.25\\mysql-connector-java-8.0.25.jar;C\:\\Users\\ideassoft\\.m2\\repository\\jakarta\\xml\\bind\\jakarta.xml.bind-api\\2.3.3\\jakarta.xml.bind-api-2.3.3.jar;C\:\\Users\\ideassoft\\.m2\\repository\\jakarta\\activation\\jakarta.activation-api\\1.2.2\\jakarta.activation-api-1.2.2.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\springframework\\spring-core\\5.3.7\\spring-core-5.3.7.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\springframework\\spring-jcl\\5.3.7\\spring-jcl-5.3.7.jar;C\:\\Users\\ideassoft\\.m2\\repository\\net\\sf\\json-lib\\json-lib\\2.4\\json-lib-2.4-jdk15.jar;C\:\\Users\\ideassoft\\.m2\\repository\\commons-beanutils\\commons-beanutils\\1.8.0\\commons-beanutils-1.8.0.jar;C\:\\Users\\ideassoft\\.m2\\repository\\commons-collections\\commons-collections\\3.2.1\\commons-collections-3.2.1.jar;C\:\\Users\\ideassoft\\.m2\\repository\\commons-lang\\commons-lang\\2.5\\commons-lang-2.5.jar;C\:\\Users\\ideassoft\\.m2\\repository\\commons-logging\\commons-logging\\1.1.1\\commons-logging-1.1.1.jar;C\:\\Users\\ideassoft\\.m2\\repository\\net\\sf\\ezmorph\\ezmorph\\1.0.6\\ezmorph-1.0.6.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\apache\\shiro\\shiro-core\\1.4.0\\shiro-core-1.4.0.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\apache\\shiro\\shiro-lang\\1.4.0\\shiro-lang-1.4.0.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\apache\\shiro\\shiro-cache\\1.4.0\\shiro-cache-1.4.0.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\apache\\shiro\\shiro-crypto-hash\\1.4.0\\shiro-crypto-hash-1.4.0.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\apache\\shiro\\shiro-crypto-core\\1.4.0\\shiro-crypto-core-1.4.0.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\apache\\shiro\\shiro-crypto-cipher\\1.4.0\\shiro-crypto-cipher-1.4.0.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\apache\\shiro\\shiro-config-core\\1.4.0\\shiro-config-core-1.4.0.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\apache\\shiro\\shiro-config-ogdl\\1.4.0\\shiro-config-ogdl-1.4.0.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\apache\\shiro\\shiro-event\\1.4.0\\shiro-event-1.4.0.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\apache\\shiro\\shiro-spring\\1.4.0\\shiro-spring-1.4.0.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\apache\\shiro\\shiro-web\\1.4.0\\shiro-web-1.4.0.jar;C\:\\Users\\ideassoft\\.m2\\repository\\log4j\\log4j\\1.2.17\\log4j-1.2.17.jar;C\:\\Users\\ideassoft\\.m2\\repository\\com\\alibaba\\fastjson\\1.2.58\\fastjson-1.2.58.jar;C\:\\Users\\ideassoft\\.m2\\repository\\cglib\\cglib\\3.2.8\\cglib-3.2.8.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\ow2\\asm\\asm\\6.2.1\\asm-6.2.1.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\apache\\ant\\ant\\1.10.3\\ant-1.10.3.jar;C\:\\Users\\ideassoft\\.m2\\repository\\org\\apache\\ant\\ant-launcher\\1.10.3\\ant-launcher-1.10.3.jar;D\:\\IntelliJ_IDEA_2020.1\\lib\\idea_rt.jar;D\:\\IntelliJ_IDEA_2020.1\\plugins\\java\\lib\\rt\\debugger-agent.jar
user.name=ideassoft
java.vm.specification.version=1.8
sun.java.command=com.ideas.trucks.memory.MyTest5
java.home=C\:\\Program Files\\Java\\jdk1.8.0_121\\jre
sun.arch.data.model=64
user.language=zh
java.specification.vendor=Oracle Corporation
awt.toolkit=sun.awt.windows.WToolkit
java.vm.info=mixed mode
java.version=1.8.0_121
java.ext.dirs=C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\lib\\ext;C\:\\Windows\\Sun\\Java\\lib\\ext
sun.boot.class.path=C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\lib\\resources.jar;C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\lib\\rt.jar;C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\lib\\sunrsasign.jar;C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\lib\\jsse.jar;C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\lib\\jce.jar;C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\lib\\charsets.jar;C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\lib\\jfr.jar;C\:\\Program Files\\Java\\jdk1.8.0_121\\jre\\classes
java.vendor=Oracle Corporation
file.separator=\\
java.vendor.url.bug=http\://bugreport.sun.com/bugreport/
sun.io.unicode.encoding=UnicodeLittle
sun.cpu.endian=little
sun.desktop=windows
sun.cpu.isalist=amd64

6.2.11、查看JVM的版本号

命令:jcmd pid VM.version

24652:
Java HotSpot(TM) 64-Bit Server VM version 25.121-b13
JDK 8.0_121

6.2.12、查看JVM启动的命令行参数

命令:jcmd pid VM.command_line

24652:
VM Arguments:
jvm_args: -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:59996,suspend=y,server=n -javaagent:D:\IntelliJ_IDEA_2020.1\plugins\java\lib\rt\debugger-agent.jar -Dfile.encoding=UTF-8
java_command: com.ideas.trucks.memory.MyTest5
java_class_path (initial): C:\Program Files\Java\jdk1.8.0_121\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_121\jre\lib\rt.jar;E:\idea_workspace\trucks\target\classes;C:\Users\ideassoft\.m2\repository\org\springframework\boot\spring-boot-starter-data-jpa\2.5.0\spring-boot-starter-data-jpa-2.5.0.jar;C:\Users\ideassoft\.m2\repository\org\springframework\boot\spring-boot-starter-aop\2.5.0\spring-boot-starter-aop-2.5.0.jar;C:\Users\ideassoft\.m2\repository\org\springframework\spring-aop\5.3.7\spring-aop-5.3.7.jar;C:\Users\ideassoft\.m2\repository\org\aspectj\aspectjweaver\1.9.6\aspectjweaver-1.9.6.jar;C:\Users\ideassoft\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\2.5.0\spring-boot-starter-jdbc-2.5.0.jar;C:\Users\ideassoft\.m2\repository\com\zaxxer\H
Launcher Type: SUN_STANDARD

6.3、jstack的使用

除了使用jcmd可以查看线程的堆栈信息,jstack也是可以查看或导出java应用程序中线程的堆栈信息的
命令:jstack pid

2021-10-18 18:55:17
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.121-b13 mixed mode):"Service Thread" #12 daemon prio=9 os_prio=0 tid=0x000000001e7f7000 nid=0x379c runnable [0x0000000000000000]java.lang.Thread.State: RUNNABLE"C1 CompilerThread2" #11 daemon prio=9 os_prio=2 tid=0x000000001e785000 nid=0x1154 waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLE"C2 CompilerThread1" #10 daemon prio=9 os_prio=2 tid=0x000000001e784000 nid=0x4ae0 waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLE"C2 CompilerThread0" #9 daemon prio=9 os_prio=2 tid=0x000000001e781800 nid=0x43b8 waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLE"JDWP Command Reader" #8 daemon prio=10 os_prio=0 tid=0x000000001ca60000 nid=0x1b40 runnable [0x0000000000000000]java.lang.Thread.State: RUNNABLE"JDWP Event Helper Thread" #7 daemon prio=10 os_prio=0 tid=0x000000001ca5c800 nid=0x4d94 runnable [0x0000000000000000]java.lang.Thread.State: RUNNABLE"JDWP Transport Listener: dt_socket" #6 daemon prio=10 os_prio=0 tid=0x000000001ca4e800 nid=0x4e2c runnable [0x0000000000000000]java.lang.Thread.State: RUNNABLE"Attach Listener" #5 daemon prio=5 os_prio=2 tid=0x000000001de23000 nid=0x57ac waiting on condition [0x0000000000000000]java.lang.Thread.State: RUNNABLE"Signal Dispatcher" #4 daemon prio=9 os_prio=2 tid=0x000000001ca35800 nid=0x6770 runnable [0x0000000000000000]java.lang.Thread.State: RUNNABLE"Finalizer" #3 daemon prio=8 os_prio=1 tid=0x000000001ca10000 nid=0x66bc in Object.wait() [0x000000001dd7e000]java.lang.Thread.State: WAITING (on object monitor)at java.lang.Object.wait(Native Method)- waiting on <0x00000006c1c00f60> (a java.lang.ref.ReferenceQueue$Lock)at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)- locked <0x00000006c1c00f60> (a java.lang.ref.ReferenceQueue$Lock)at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)"Reference Handler" #2 daemon prio=10 os_prio=2 tid=0x000000001c9e9000 nid=0x32f4 in Object.wait() [0x000000001dc7f000]java.lang.Thread.State: WAITING (on object monitor)at java.lang.Object.wait(Native Method)- waiting on <0x00000006c1c04428> (a java.lang.ref.Reference$Lock)at java.lang.Object.wait(Object.java:502)at java.lang.ref.Reference.tryHandlePending(Reference.java:191)- locked <0x00000006c1c04428> (a java.lang.ref.Reference$Lock)at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153)"main" #1 prio=5 os_prio=0 tid=0x00000000031f7000 nid=0x162c runnable [0x00000000031de000]java.lang.Thread.State: RUNNABLEat java.io.FileOutputStream.writeBytes(Native Method)at java.io.FileOutputStream.write(FileOutputStream.java:326)at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)- locked <0x00000006c1c03c28> (a java.io.BufferedOutputStream)at java.io.PrintStream.write(PrintStream.java:482)- locked <0x00000006c1c034e0> (a java.io.PrintStream)at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)at sun.nio.cs.StreamEncoder.flushBuffer(StreamEncoder.java:104)- locked <0x00000006c1c034a0> (a java.io.OutputStreamWriter)at java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java:185)at java.io.PrintStream.newLine(PrintStream.java:546)- eliminated <0x00000006c1c034e0> (a java.io.PrintStream)at java.io.PrintStream.println(PrintStream.java:807)- locked <0x00000006c1c034e0> (a java.io.PrintStream)at com.ideas.trucks.memory.MyTest5.main(MyTest5.java:13)"VM Thread" os_prio=2 tid=0x000000001c9e7000 nid=0x7dc runnable"GC task thread#0 (ParallelGC)" os_prio=0 tid=0x000000000320c800 nid=0x46ec runnable"GC task thread#1 (ParallelGC)" os_prio=0 tid=0x000000000320e000 nid=0x5b44 runnable"GC task thread#2 (ParallelGC)" os_prio=0 tid=0x000000000320f800 nid=0x4958 runnable"GC task thread#3 (ParallelGC)" os_prio=0 tid=0x0000000003212000 nid=0x5c04 runnable"VM Periodic Task Thread" os_prio=2 tid=0x000000001e8b2800 nid=0x4374 waiting on conditionJNI global references: 1951

6.4、jmc的使用

java mission control是一个堆Java应用程序进行管理、监视、概要分析和故障排除的工具套件,他包含了JMX控制台和Java飞行记录器(JFR)

在这里插入图片描述

6.5、jhat的使用

jhat主要是对堆信息分析的一个命令行工具,他可以生成一个网站服务供我们查看,虽然我们的jvisualvm以及其他工具也可以分析,但是他们都是图形化的工具,而jhat并非图形化工具

  • 第一步:导出堆文件,可以使用jmap导出堆的hprof文件,上面有演示过
  • 第二步:用jhat打开堆文件

命令:jhat filename

···console
Reading from .\Desktop\test.hprof…
Dump file created Mon Oct 18 18:20:24 CST 2021
Snapshot read, resolving…
Resolving 13718 objects…
Chasing references, expect 2 dots…
Eliminating duplicate references…
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.
···

  • 第三步:打开浏览器输入localhost:7000即可查看分析
    在这里插入图片描述

这篇关于JVM内存以及常用工具的详细讲解-刘宇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/216178

相关文章

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析

Java字符串处理全解析(String、StringBuilder与StringBuffer)

《Java字符串处理全解析(String、StringBuilder与StringBuffer)》:本文主要介绍Java字符串处理全解析(String、StringBuilder与StringBu... 目录Java字符串处理全解析:String、StringBuilder与StringBuffer一、St

springboot整合阿里云百炼DeepSeek实现sse流式打印的操作方法

《springboot整合阿里云百炼DeepSeek实现sse流式打印的操作方法》:本文主要介绍springboot整合阿里云百炼DeepSeek实现sse流式打印,本文给大家介绍的非常详细,对大... 目录1.开通阿里云百炼,获取到key2.新建SpringBoot项目3.工具类4.启动类5.测试类6.测

Spring Boot循环依赖原理、解决方案与最佳实践(全解析)

《SpringBoot循环依赖原理、解决方案与最佳实践(全解析)》循环依赖指两个或多个Bean相互直接或间接引用,形成闭环依赖关系,:本文主要介绍SpringBoot循环依赖原理、解决方案与最... 目录一、循环依赖的本质与危害1.1 什么是循环依赖?1.2 核心危害二、Spring的三级缓存机制2.1 三

如何在Mac上安装并配置JDK环境变量详细步骤

《如何在Mac上安装并配置JDK环境变量详细步骤》:本文主要介绍如何在Mac上安装并配置JDK环境变量详细步骤,包括下载JDK、安装JDK、配置环境变量、验证JDK配置以及可选地设置PowerSh... 目录步骤 1:下载JDK步骤 2:安装JDK步骤 3:配置环境变量1. 编辑~/.zshrc(对于zsh

在Spring Boot中浅尝内存泄漏的实战记录

《在SpringBoot中浅尝内存泄漏的实战记录》本文给大家分享在SpringBoot中浅尝内存泄漏的实战记录,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录使用静态集合持有对象引用,阻止GC回收关键点:可执行代码:验证:1,运行程序(启动时添加JVM参数限制堆大小):2,访问 htt

SpringBoot集成Milvus实现数据增删改查功能

《SpringBoot集成Milvus实现数据增删改查功能》milvus支持的语言比较多,支持python,Java,Go,node等开发语言,本文主要介绍如何使用Java语言,采用springboo... 目录1、Milvus基本概念2、添加maven依赖3、配置yml文件4、创建MilvusClient

浅析Java中如何优雅地处理null值

《浅析Java中如何优雅地处理null值》这篇文章主要为大家详细介绍了如何结合Lambda表达式和Optional,让Java更优雅地处理null值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录场景 1:不为 null 则执行场景 2:不为 null 则返回,为 null 则返回特定值或抛出异常场景

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

SpringBoot应用中出现的Full GC问题的场景与解决

《SpringBoot应用中出现的FullGC问题的场景与解决》这篇文章主要为大家详细介绍了SpringBoot应用中出现的FullGC问题的场景与解决方法,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录Full GC的原理与触发条件原理触发条件对Spring Boot应用的影响示例代码优化建议结论F