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

一、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 exceeded
	at 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.StackOverflowError
	at 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: Metaspace
	at 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@0x00000007c000fa48

total = 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-b13

using thread-local object allocation.
Parallel GC with 4 thread(s)

Heap Configuration:
   MinHeapFreeRatio         = 0
   MaxHeapFreeRatio         = 100
   MaxHeapSize              = 4265607168 (4068.0MB)
   NewSize                  = 89128960 (85.0MB)
   MaxNewSize               = 1421869056 (1356.0MB)
   OldSize                  = 179306496 (171.0MB)
   NewRatio                 = 2
   SurvivorRatio            = 8
   MetaspaceSize            = 21807104 (20.796875MB)
   CompressedClassSpaceSize = 1073741824 (1024.0MB)
   MaxMetaspaceSize         = 17592186044415 MB
   G1HeapRegionSize         = 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 Generation
   capacity = 179306496 (171.0MB)
   used     = 1007688 (0.9610061645507812MB)
   free     = 178298808 (170.03899383544922MB)
   0.5619919090940241% used

1765 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
help

For 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  [C
   2:          3261          78264  java.lang.String
   3:           619          70792  java.lang.Class
   4:           685          42728  [Ljava.lang.Object;
   5:           843          33720  java.util.TreeMap$Entry
   6:           139          29176  [B
   7:           247          15808  java.net.URL
   8:           350          11200  java.util.HashMap$Node
   9:            90           8640  java.util.jar.JarFile$JarFileEntry
  10:           208           8320  java.util.LinkedHashMap$Entry
  11:           201           8168  [Ljava.lang.String;
  12:           102           8160  [Ljava.util.WeakHashMap$Entry;
  13:           190           7600  java.lang.ref.Finalizer
  14:           123           6888  sun.misc.URLClassPath$JarLoader
  15:            99           6336  java.util.jar.JarFile
  16:            29           5840  [Ljava.util.HashMap$Node;
  17:           102           5712  sun.nio.cs.UTF_8$Encoder
  18:            79           5688  java.lang.reflect.Field
  19:           230           5520  java.util.LinkedList$Node
  20:           121           5240  [I
  21:           208           4992  java.io.ExpiringCache$Entry
  22:           102           4896  java.util.WeakHashMap
  23:           151           4832  java.util.Hashtable$Entry
  24:           137           4384  java.util.concurrent.ConcurrentHashMap$Node
  25:            86           4128  java.util.zip.Inflater
  26:           256           4096  java.lang.Integer
  27:           100           4000  java.lang.ref.SoftReference
  28:           120           3840  java.util.LinkedList
  29:            10           3760  java.lang.Thread
  30:           107           3424  java.lang.ref.ReferenceQueue
  31:            99           3168  java.util.zip.ZipCoder
  32:            99           2376  java.util.ArrayDeque
  33:            86           2064  java.util.zip.ZStreamRef
  34:           122           1952  java.lang.Object
  35:            38           1824  sun.util.locale.LocaleObjectCache$CacheEntry
  36:           109           1744  java.lang.ref.ReferenceQueue$Lock
  37:            35           1680  java.util.HashMap
  38:            19           1672  java.lang.reflect.Method
  39:            18           1440  java.lang.reflect.Constructor
  40:             5           1424  [Ljava.util.concurrent.ConcurrentHashMap$Node;
  41:             8           1264  [Ljava.util.Hashtable$Entry;
  42:            20           1120  java.lang.Class$ReflectionData
  43:             2           1064  [Ljava.lang.invoke.MethodHandle;
  44:             1           1040  [Ljava.lang.Integer;
  45:             1           1040  [[C
  46:            26           1040  java.io.ObjectStreamField
  47:            27            864  com.intellij.rt.debugger.agent.CaptureAgent$InstrumentPoint
  48:            19            760  sun.util.locale.BaseLocale$Key
  49:             8            640  [S
  50:            29            624  [Ljava.lang.Class;
  51:            19            608  java.util.Locale
  52:            19            608  sun.util.locale.BaseLocale
  53:            24            576  java.util.ArrayList
  54:            14            560  java.security.AccessControlContext
  55:             8            512  java.util.concurrent.ConcurrentHashMap
  56:            20            480  java.util.jar.Attributes$Name
  57:             8            456  [Ljava.lang.reflect.Field;
  58:            19            456  java.util.Locale$LocaleKey
  59:            13            416  java.io.File
  60:             1            384  java.lang.ref.Finalizer$FinalizerThread
  61:             6            384  java.nio.DirectByteBuffer
  62:             1            376  java.lang.ref.Reference$ReferenceHandler
  63:             6            336  java.nio.DirectLongBufferU
  64:            10            320  java.lang.OutOfMemoryError
  65:            10            288  [Ljava.io.ObjectStreamField;
  66:            12            288  sun.misc.MetaIndex
  67:             7            280  java.util.WeakHashMap$Entry
  68:            10            240  java.security.CryptoPrimitive
  69:             5            240  java.util.TreeMap
  70:             7            224  java.nio.file.attribute.FileTime
  71:             9            216  [Ljava.lang.reflect.Constructor;
  72:             3            216  java.util.regex.Pattern
  73:             9            216  sun.reflect.NativeConstructorAccessorImpl
  74:             4            192  java.util.Hashtable
  75:             4            192  java.util.Properties
  76:             6            192  java.util.Vector
  77:             3            168  java.lang.Package
  78:             4            160  java.security.ProtectionDomain
  79:             6            144  sun.misc.PerfCounter
  80:             9            144  sun.reflect.DelegatingConstructorAccessorImpl
  81:             6            144  sun.security.util.DisabledAlgorithmConstraints$Constraint$Operator
  82:             2            128  java.io.ExpiringCache$1
  83:             4            128  java.security.CodeSource
  84:             3            120  [Ljava.lang.reflect.Method;
  85:             3            120  java.io.FileDescriptor
  86:             5            120  java.util.regex.Pattern$Slice
  87:             5            120  sun.misc.JarIndex
  88:             2            112  [Ljava.security.CryptoPrimitive;
  89:             4             96  java.lang.RuntimePermission
  90:             2             96  java.lang.ThreadGroup
  91:             3             96  java.lang.ThreadLocal$ThreadLocalMap$Entry
  92:             2             96  java.nio.HeapByteBuffer
  93:             3             96  java.util.Stack
  94:             3             96  java.util.regex.Pattern$Curly
  95:             1             96  sun.misc.Launcher$AppClassLoader
  96:             2             96  sun.misc.URLClassPath
  97:             2             96  sun.nio.cs.StreamEncoder
  98:             1             88  sun.misc.Launcher$ExtClassLoader
  99:             1             80  [Ljava.lang.ThreadLocal$ThreadLocalMap$Entry;
 100:             2             80  java.io.BufferedWriter
 101:             2             80  java.io.ExpiringCache
 102:             2             80  java.lang.ClassLoader$NativeLibrary
 103:             5             80  java.lang.ThreadLocal
 104:             2             72  [Ljava.util.regex.Pattern$Node;
 105:             3             72  java.util.Collections$SynchronizedSet
 106:             3             72  java.util.concurrent.atomic.AtomicLong
 107:             3             72  java.util.regex.Pattern$Ctype
 108:             3             72  java.util.regex.Pattern$Single
 109:             2             64  [Ljava.lang.Thread;
 110:             4             64  [Ljava.security.Principal;
 111:             2             64  java.io.FileOutputStream
 112:             2             64  java.io.FilePermission
 113:             2             64  java.io.PrintStream
 114:             2             64  java.lang.ClassValue$Entry
 115:             2             64  java.lang.VirtualMachineError
 116:             2             64  java.lang.ref.ReferenceQueue$Null
 117:             2             64  java.security.BasicPermissionCollection
 118:             2             64  java.security.Permissions
 119:             4             64  java.security.ProtectionDomain$Key
 120:             4             64  java.util.HashSet
 121:             2             64  java.util.regex.Pattern$Branch
 122:             1             56  sun.nio.cs.ext.DoubleByte$Decoder
 123:             1             48  [J
 124:             1             48  [Ljava.util.concurrent.TimeUnit;
 125:             2             48  java.io.BufferedOutputStream
 126:             2             48  java.io.File$PathStatus
 127:             2             48  java.io.FilePermissionCollection
 128:             2             48  java.io.OutputStreamWriter
 129:             1             48  java.lang.ProcessEnvironment
 130:             2             48  java.nio.charset.CoderResult
 131:             3             48  java.nio.charset.CodingErrorAction
 132:             2             48  java.util.regex.Pattern$GroupHead
 133:             2             48  java.util.regex.Pattern$GroupTail
 134:             2             48  java.util.regex.Pattern$SliceI
 135:             2             48  java.util.regex.Pattern$Start
 136:             2             48  sun.instrument.TransformerManager
 137:             2             48  sun.misc.NativeSignalHandler
 138:             2             48  sun.misc.Signal
 139:             2             48  sun.reflect.NativeMethodAccessorImpl
 140:             2             40  [Lsun.instrument.TransformerManager$TransformerInfo;
 141:             1             40  [Lsun.security.util.DisabledAlgorithmConstraints$Constraint$Operator;
 142:             1             40  java.io.BufferedInputStream
 143:             1             40  sun.nio.cs.StandardCharsets$Aliases
 144:             1             40  sun.nio.cs.StandardCharsets$Cache
 145:             1             40  sun.nio.cs.StandardCharsets$Classes
 146:             1             40  sun.nio.cs.UTF_8$Decoder
 147:             1             40  sun.nio.cs.ext.ExtendedCharsets
 148:             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$ParamKeyProvider
 152:             1             32  java.io.FileInputStream
 153:             1             32  java.io.WinNTFileSystem
 154:             1             32  java.lang.ArithmeticException
 155:             2             32  java.lang.Boolean
 156:             1             32  java.lang.NullPointerException
 157:             1             32  java.lang.StringCoding$StringDecoder
 158:             1             32  java.lang.StringCoding$StringEncoder
 159:             2             32  java.nio.ByteOrder
 160:             1             32  java.util.Collections$UnmodifiableMap
 161:             1             32  java.util.RegularEnumSet
 162:             2             32  java.util.concurrent.atomic.AtomicInteger
 163:             1             32  java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl
 164:             1             32  java.util.regex.Pattern$BnM
 165:             2             32  java.util.regex.Pattern$BranchConn
 166:             1             32  sun.instrument.InstrumentationImpl
 167:             2             32  sun.net.www.protocol.jar.Handler
 168:             1             32  sun.nio.cs.StandardCharsets
 169:             2             32  sun.reflect.DelegatingMethodAccessorImpl
 170:             1             32  sun.security.util.DisabledAlgorithmConstraints$KeySizeConstraint
 171:             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$FieldKeyProvider
 175:             1             24  java.lang.ClassValue$Version
 176:             1             24  java.lang.StringBuilder
 177:             1             24  java.lang.ThreadLocal$ThreadLocalMap
 178:             1             24  java.lang.invoke.MethodHandleImpl$4
 179:             1             24  java.lang.reflect.ReflectPermission
 180:             1             24  java.util.BitSet
 181:             1             24  java.util.Collections$EmptyMap
 182:             1             24  java.util.Collections$SetFromMap
 183:             1             24  java.util.Collections$UnmodifiableRandomAccessList
 184:             1             24  java.util.Locale$Cache
 185:             1             24  java.util.concurrent.TimeUnit$1
 186:             1             24  java.util.concurrent.TimeUnit$2
 187:             1             24  java.util.concurrent.TimeUnit$3
 188:             1             24  java.util.concurrent.TimeUnit$4
 189:             1             24  java.util.concurrent.TimeUnit$5
 190:             1             24  java.util.concurrent.TimeUnit$6
 191:             1             24  java.util.concurrent.TimeUnit$7
 192:             1             24  java.util.jar.Manifest
 193:             1             24  sun.instrument.TransformerManager$TransformerInfo
 194:             1             24  sun.launcher.LauncherHelper
 195:             1             24  sun.misc.URLClassPath$FileLoader
 196:             1             24  sun.nio.cs.ISO_8859_1
 197:             1             24  sun.nio.cs.ThreadLocalCoders$1
 198:             1             24  sun.nio.cs.ThreadLocalCoders$2
 199:             1             24  sun.nio.cs.US_ASCII
 200:             1             24  sun.nio.cs.UTF_16
 201:             1             24  sun.nio.cs.UTF_16BE
 202:             1             24  sun.nio.cs.UTF_16LE
 203:             1             24  sun.nio.cs.UTF_8
 204:             1             24  sun.nio.cs.ext.GBK
 205:             1             24  sun.security.util.DisabledAlgorithmConstraints
 206:             1             24  sun.util.locale.BaseLocale$Cache
 207:             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$1
 211:             1             16  com.intellij.rt.debugger.agent.CaptureAgent$CaptureTransformer
 212:             1             16  com.intellij.rt.debugger.agent.CaptureStorage$1
 213:             1             16  java.io.FileDescriptor$1
 214:             1             16  java.lang.CharacterDataLatin1
 215:             1             16  java.lang.ClassValue$Identity
 216:             1             16  java.lang.ProcessEnvironment$EntryComparator
 217:             1             16  java.lang.ProcessEnvironment$NameComparator
 218:             1             16  java.lang.Runtime
 219:             1             16  java.lang.String$CaseInsensitiveComparator
 220:             1             16  java.lang.System$2
 221:             1             16  java.lang.Terminator$1
 222:             1             16  java.lang.invoke.MemberName$Factory
 223:             1             16  java.lang.invoke.MethodHandleImpl$2
 224:             1             16  java.lang.invoke.MethodHandleImpl$3
 225:             1             16  java.lang.ref.Reference$1
 226:             1             16  java.lang.ref.Reference$Lock
 227:             1             16  java.lang.reflect.ReflectAccess
 228:             1             16  java.net.URLClassLoader$7
 229:             1             16  java.nio.Bits$1
 230:             1             16  java.nio.charset.CoderResult$1
 231:             1             16  java.nio.charset.CoderResult$2
 232:             1             16  java.security.ProtectionDomain$2
 233:             1             16  java.security.ProtectionDomain$JavaSecurityAccessImpl
 234:             1             16  java.util.Collections$EmptyList
 235:             1             16  java.util.Collections$EmptySet
 236:             1             16  java.util.Collections$UnmodifiableSet
 237:             1             16  java.util.HashMap$EntrySet
 238:             1             16  java.util.Hashtable$EntrySet
 239:             1             16  java.util.WeakHashMap$KeySet
 240:             1             16  java.util.concurrent.atomic.AtomicBoolean
 241:             1             16  java.util.jar.Attributes
 242:             1             16  java.util.jar.JavaUtilJarAccessImpl
 243:             1             16  java.util.regex.Pattern$4
 244:             1             16  java.util.regex.Pattern$LastNode
 245:             1             16  java.util.regex.Pattern$Node
 246:             1             16  java.util.zip.ZipFile$1
 247:             1             16  sun.misc.ASCIICaseInsensitiveComparator
 248:             1             16  sun.misc.Launcher
 249:             1             16  sun.misc.Launcher$Factory
 250:             1             16  sun.misc.Perf
 251:             1             16  sun.misc.Unsafe
 252:             1             16  sun.net.www.protocol.file.Handler
 253:             1             16  sun.reflect.ReflectionFactory
 254:             1             16  sun.security.util.AlgorithmDecomposer
 255:             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: RUNNABLE
        at 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 condition

JNI 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: RUNNABLE
        at 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 condition

JNI 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即可查看分析
    在这里插入图片描述
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JVMJava Virtual Machine)内存模型指的是JVM在运行时对内存的使用和管理,包括程序计数器、虚拟机栈、本地方法栈、堆和方法区等。 1. 程序计数器 程序计数器是一块较小的内存区域,可以看做是当前线程所执行的字节码的行号指示器。在虚拟机切换线程时,会将当前线程的程序计数器值保存到内存中,等待下次线程执行时再恢复。 2. 虚拟机栈 虚拟机栈是线程私有的内存区域,用于存储局部变量、方法参数、返回值和操作数栈等。每个方法在执行的时候都会创建一个栈帧,栈帧包含了方法的局部变量表、操作数栈、动态链接、方法出口等信息。 虚拟机栈的大小可以通过-Xss参数来设置。 3. 本地方法栈 本地方法栈与虚拟机栈类似,不同的是本地方法栈为本地方法服务。本地方法是使用C或C++等其他语言编写的方法,本地方法栈用于为执行本地方法时分配内存。 4. 堆 堆是JVM中最大的一块内存区域,用于存储对象实例和数组。堆的大小可以通过-Xmx和-Xms参数来设置。 堆被划分为新生代和老年代两个区域,新生代又被划分为Eden区、Survivor0区和Survivor1区。 5. 方法区 方法区用于存储类信息、常量、静态变量、即时编译器编译后的代码等。方法区的大小可以通过-XX:MaxPermSize参数来设置。 方法区也被称为永久代,但是在JDK8中,永久代被移除,取而代之的是元空间(Metaspace)。 总体来说,JVM内存模型的设计是为了更好地管理内存,提高程序的性能和稳定性。但是如果内存使用不当,就容易导致内存溢出等问题,因此需要开发人员在编写程序时注意内存的使用和管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值