您的位置:首页 > 编程语言 > Java开发

深入理解JVM(三)-JDK命令行工具及可视化工具

2016-03-30 10:33 323 查看
对于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=0

jmap: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虚拟机》这本书。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: