本文主要是介绍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内存以及常用工具的详细讲解-刘宇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!