深入理解JVM(三)-JDK命令行工具及可视化工具
对于C/C++开发者来说,他们在内存管理方面具有至高的权利,但是也承担着巨大的维护责任。而对于Java程序员来说,有了JVM(Java虚拟机)管理机制的帮助,再也不用担心内存泄漏和内存溢出问题了。因此,这篇文章我将深入探讨一下JVM,它的内部结构以及运行原理。一、JDK命令行的工具JPS :虚拟机进程状况工具-q 只输出LVMID,省略主类的名称-m 输出虚拟机进程启动时传递给主类main
对于C/C++开发者来说,他们在内存管理方面具有至高的权利,但是也承担着巨大的维护责任。而对于Java程序员来说,有了JVM(Java虚拟机)管理机制的帮助,再也不用担心内存泄漏和内存溢出问题了。因此,这篇文章我将深入探讨一下JVM,它的内部结构以及运行原理。
一、JDK命令行的工具
JPS :虚拟机进程状况工具
-q 只输出LVMID,省略主类的名称
-m 输出虚拟机进程启动时传递给主类main()函数的参数
-l 输出主类的全名,如果进程执行的是Jar包,输出Jar路径
-v 输出虚拟机进程启动JVM参数jstat:虚拟机统计信息监视工具
可以显示本地或远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。
命令格式 jstat [option vmid [interval[s|ms] [count]]]
如果是远程虚拟机进程 那么VMID格式:[protocol:][//]lvmid[@hostname[:port]/servername]
参数interval和count代表查询间隔和次数,如果省略了这两个参数,说明只查询一次。jinfo:Java配置信息工具
jinfo是作用是实时查看和调整虚拟机的各项参数。使用jps -v参数可以查看虚拟机启动时显示执行的参数列表。
jinfo -flag PretenureSizeThreshold 7832
-XX:PretenureSizeThreshold=0jmap:Java内存映像工具
jmap(Memory Map for Java)命令用于生成堆转储快照(一般称为heapdump或dump文件)。
-dump 生成Java堆转储快照。
-finalizerinfo 显示在F-Queue中等待Finalizer线程执行finalize方法的对象。
-heap 显示Java堆详细信息。
-histo 显示堆中对象统计信息。
-permstat 以ClassLoader为统计口径显示永久代内存状态。
-F 当虚拟机进程对-dump选项没有响应时,可使用这个选项强制生成dump快照。jhat:虚拟机堆转储快照分析工具
与jmap搭配使用,来分析jmap生成的堆 转储快照。jstack:Java堆栈跟踪工具
jstack(Stack Trace for Java)命令用于生成虚拟机当前时刻的线程快照(一般称为threaddump或javacore文件)。
-f 当正常输出的请求不被响应时,强制输出线程堆栈
-l 除堆栈外,显示锁的附件信息
-m 如果调用到本地方法的话,可以显示C/C++的堆栈
二、JDK的可视化工具
JConsole
JConsole工具在JDK/bin目录下,启动JConsole后,将自动搜索本机运行的jvm进程,不需要jps命令来查询指定。双击其中一个jvm进程即可开始监控,也可使用“远程进程”来连接远程服务器。VisualVM
VisualVM是一个集成多个JDK命令行工具的可视化工具。VisualVM基于NetBeans平台开发,它具备了插件扩展功能的特性,通过插件的扩展,可用于显示虚拟机进程及进程的配置和环境信息(jps,jinfo),监视应用程序的CPU、GC、堆、方法区及线程的信息(jstat、jstack)等。VisualVM在JDK/bin目录下。
感谢
如果大家想了解更多,欢迎继续阅读接下来的章节,推荐大家熟读《深入理解Java虚拟机》这本书。
更多推荐
所有评论(0)