在之前的教程中,我曾介绍过 这些工具。现在,我向大家介绍其中最重要的5个工具。

1.javap

javap是一个Java类文件反汇编程序,可以查看Java编译器生成的字节码,是分析代码的一个好工具。让我们用javap来编译这段Hello World代码,再分解它。

  1. public class HelloWorld {
  2. public static void main(String... args) {
  3. System.out.println("Hello World!");
  4. }
  5. }

C:\Users\Cycle\Desktop>javap HelloWorld

我没有传递任何参数,只是运行了javap这个工具,就得到了上面这个结果。默认情况下,它会输出Java类的package,protected,public字段和方法。

  1. Compiled from "HelloWorld.java"
  2. public class HelloWorld {
  3. public HelloWorld();
  4. public static void main(java.lang.String...);
  5. }

C:\Users\Cycle\Desktop>javap -c HelloWorld

如果传递参数-c到javap里面,便会得到上面这个结果。这是一条非常好的信息,这样输出的指令可以帮助我们更好地了解JVM。

  1. Compiled from "HelloWorld.java"
  2. public class HelloWorld {
  3. public HelloWorld();
  4. Code:
  5. 0: aload_0
  6. 1: invokespecial #1                  // Method java/lang/Object."":()V
  7. 4: return
  8. public static void main(java.lang.String...);
  9. Code:
  10. 0: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
  11. 3: ldc           #3                  // String Hello World!
  12. 5: invokevirtual #4                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
  13. 8: return
  14. }

2.jvisualvm

jvisualvm是一个Java虚拟机监控和分析工具,该工具提供了一个图形界面窗口,并且可以直观的了解Java应用程序的运行时信息。jvisualvm集成了许多工具,比如像jmp、jinfo、jstat、jstack、JConsole等。自从JDK 6 Update 7以后已经作为JDK的一部分。

在 Java垃圾回收监控和分析这篇文章中,我曾使用jvisualvm,大家不妨过去看看jvisualvm的使用方法。

3.jcmd

jcmd主要用来把诊断命令请求发送到Java JVM中,当JVM进程中没有jcmd参数列表时,jcmd就会立即运行。这相当于jps工具,我开始启动jconsole,并且把它作为参数传递到jcmd,得到如下结果,这个也可以通过进程id(pid)实现。

C:\Users\Cycle>jconsole

C:\Users\Cycle>jcmd JConsole help
3344:
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
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

C:\Users\Cycle>jcmd JConsole VM.uptime 
3344:289.977 s

VM.uptime显示了Java应用程序具体运行时间。

在调试的时候,下面的参数可以用于并发锁的线程堆栈溢出。

jcmd <pid> Thread.print -l

4.jhat

jhat的全称是Java heap analysis tool。它主要是用来解析和浏览堆文件,jhat有时更像是一个可视化工具。jhat解析堆存储( heap dump)并启动一个webserver,然后用户可以在浏览器下查看堆。jhat支持对象查询语言(oql)和一些预先设计查询。OQL帮助可能在

http://localhost:7000/oql/ 
http://localhost:7000/oqlhelp/

jmap工具来生成堆转储,我们应该使用-dump参数,下面jhat工具可以使用的参数列表:

C:\Users\Cycle>jhat -help
Usage: jhat [-stack ] [-refs ] [-port ] [-baseline ] [-debug ] [-version] [-h|-help] -J Pass directly to the runtime system. For
example, -J-mx512m to use a maximum heap size of 512MB
-stack false: Turn off tracking object allocation call stack.
-refs false: Turn off tracking of references to objects
-port : Set the port for the HTTP server. Defaults to 7000
-exclude : Specify a file that lists data members that should
be excluded from the reachableFrom query.
-baseline : Specify a baseline object dump. Objects in
both heap dumps with the same ID and same class will
be marked as not being "new".
-debug : Set debug level.
0: No debug output
1: Debug hprof file parsing
2: Debug hprof file parsing, no server
-version Report version number
-h|-help Print this help and exit
The file to read For a dump file that contains multiple heap dumps,
you may specify which dump in the file
by appending "#" to the file name, i.e. "foo.hprof#3". All boolean options default to "true"

我给jconsole应用程序创建了一个堆转储文件,并使用以下命令来运行进程id 3344:

jmap -dump:format=b,file=heap.bin 3344

现在,堆转储文件准备就绪,运行下面命令并且会启动一个服务:

jmap -dump:format=b,file=heap.bin 3344

在控制台输出结果:

C:\Users\Cycle\Desktop>jhat heap.bin
Reading from heap.bin...
Dump file created Sun Nov 16 19:26:35 IST 2014
Snapshot read, resolving...
Resolving 641209 objects...
Chasing references, expect 128 dots..................
Eliminating duplicate references.....................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.

在浏览器中输入:http://localhost:7000/后便会出来堆转储的详细情况:

例如,还可以在http://localhost:7000/histo/查看堆内存柱状图。

5.Oracle Java Mission Control

作为JVM融合战略的一部分,主要用来统一HotSpot、JRockit VMs。目前,JRockit Mission Control在标准版Java SE中已经可以使用。Java Mission Control(JMC)与Java Flight Recorder一起工作,适用于HotSpot JVM,用来记录核心数据和事件。它是一个调优工具,并且适用于Oracle JDK。一旦出现问题,这些数据就可以用来分析。

开发者可以使用jmc命令来创建JMC工具。

JDK工具的更多相关文章

  1. 三、jdk工具之jstack(Java Stack Trace)

    目录 一.jdk工具之jps(JVM Process Status Tools)命令使用 二.jdk命令之javah命令(C Header and Stub File Generator) 三.jdk ...

  2. 八、jdk工具之JvisualVM、JvisualVM之一--(visualVM介绍及性能分析示例)

    目录 一.jdk工具之jps(JVM Process Status Tools)命令使用 二.jdk命令之javah命令(C Header and Stub File Generator) 三.jdk ...

  3. 十二、jdk工具之jcmd介绍(堆转储、堆分析、获取系统信息、查看堆外内存)

    目录 一.jdk工具之jps(JVM Process Status Tools)命令使用 二.jdk命令之javah命令(C Header and Stub File Generator) 三.jdk ...

  4. 一、jdk工具之jps(JVM Process Status Tools)命令使用

    目录 一.jdk工具之jps(JVM Process Status Tools)命令使用 二.jdk命令之javah命令(C Header and Stub File Generator) 三.jdk ...

  5. 五、jdk工具之jmap(java memory map)、 mat之四--结合mat对内存泄露的分析、jhat之二--结合jmap生成的dump结果在浏览器上展示

    目录 一.jdk工具之jps(JVM Process Status Tools)命令使用 二.jdk命令之javah命令(C Header and Stub File Generator) 三.jdk ...

  6. 八、jdk工具之JvisualVM、JvisualVM之二--Java程序性能分析工具Java VisualVM

    目录 一.jdk工具之jps(JVM Process Status Tools)命令使用 二.jdk命令之javah命令(C Header and Stub File Generator) 三.jdk ...

  7. 十、jdk工具之Jdb命令(The Java Debugger)

    目录 一.jdk工具之jps(JVM Process Status Tools)命令使用 二.jdk命令之javah命令(C Header and Stub File Generator) 三.jdk ...

  8. [置顶] JDK工具(一)–Java编译器javac

    1.概述    javac.exe: Java编译器,将Java源代码转换成字节码. 2.用法    javac <选项> <源文件> (使用过程中发现,javac <源 ...

  9. JDK工具(一)–Java编译器javac

    1.概述    javac.exe: Java编译器,将Java源代码转换成字节码. 2.用法    javac <选项> <源文件> (使用过程中发现,javac <源 ...

  10. 使用JDK工具进行Java服务器应用程序故障排除

    Java性能调优指南–有关提高Java代码性能的各种技巧. 最近又学到了很多新知识,感谢优锐课老师细致地讲解,这篇博客记录下自己所学所想. 1. 介绍 在Java世界中,我们大多数人习惯于在Java应 ...

随机推荐

  1. springMVC绑定json参数之二(2.1.1)

    二.springmvc 接收不同格式的json字符串 1.首先扫盲几个知识点: 例子如下: 前台传递json对象(这里uu[0]的名字uu要和Test对象中的属性List<User>名称对 ...

  2. React 特别需要注意的地方

    如图:

  3. Centos6.5安装JDK8教程(一)

    [原] 转载请注明原文地址, 保持对知识基本尊重,谢谢!   Win7宿主系统 VmWareWorkstation 11应用下的 Centos6.5系统.   /******************* ...

  4. Servlet处理流程分析

    ---------------siwuxie095                                 Tomcat 处理客户端请求的方式:     Tomcat 既是一个 Servlet ...

  5. 笔记:eclipse的findbugs插件安装成功却不显示

    关键字:findbugs eclipse的findbugs插件安装成功却不显示的原因有: 1.插件版本太高,低版本的eclipse不兼容 2.也有可能是JDK版本低 findbugs安装方法: 1.在 ...

  6. 反射实现数据库增删改查DAO及DAOImpl源代码(一)

    这是DAO层,第一次尝试,如有bug希望能即使反馈,我们共同进步.具体的用法和实现原理我会在前面几篇博客中补充更新.配置文件及项目目录结构会在下一篇中贴出! package com.javasm.su ...

  7. C#报算术运算导致溢出的错误

    如果是在fill datatable时报这个错,是因为所查询的数据中有在数据库中为NUMBER类型的字段,这种类型C#中不能识别,需TO_CHAR转换成字符型,就不会再报这个错了. e.g. SELE ...

  8. 洛谷P5170 【模板】类欧几里得算法(数论)

    传送门 此题剧毒,公式恐惧症患者请直接转去代码→_→ 前置芝士 基本数论芝士 题解 本题就是要我们求三个函数的值 \[f(a,b,c,n)=\sum_{i=0}^n \left\lfloor\frac ...

  9. [转] ios打包IPA的各种问题和解决方法

    最近做了一个东西,在打包ipa文件时遇到了各种问题,纠结了我好几天. 由于我一直是做android的,在打包时以为ios打包也和android一样:用IDE(eclipse)生成一个签名证书,然后打包 ...

  10. Macbook sublime 安装markdown插件

    Sublime Text为3 版本 安装sublime text 插件,需要“***”,不会弄的,就可以移步了. 首先按 command + shift + p 调出安装插件的界面,输入“instal ...