天天看点

每个Java开发者都应该知道的5个JDK工具

目前,有许多工具可以绑定到java jdk上面,其中java.exe和javac.exe是每位java工程师的必 备武器,与此同时,还有许多其它java jdk工具呈现在大家眼前。大多数java程序员都没有使用过这些工具,但如果使用,它们会让你的工作事半功倍。

每个Java开发者都应该知道的5个JDK工具

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

每个Java开发者都应该知道的5个JDK工具

public class helloworld {  

    public static void main(string... args) {  

        system.out.println("hello world!");  

    }  

}  

c:\users\cycle\desktop>javap helloworld

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

每个Java开发者都应该知道的5个JDK工具

compiled from "helloworld.java"  

  public helloworld();  

  public static void main(java.lang.string...);  

c:\users\cycle\desktop>javap -c helloworld

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

每个Java开发者都应该知道的5个JDK工具

    code:  

       0: aload_0  

       1: invokespecial #1                  // method java/lang/object."":()v  

       4: return  

       0: getstatic     #2                  // field java/lang/system.out:ljava/io/printstream;  

       3: ldc           #3                  // string hello world!  

       5: invokevirtual #4                  // method java/io/printstream.println:(ljava/lang/string;)v  

       8: return  

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

每个Java开发者都应该知道的5个JDK工具

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

c:\users\cycle>jcmd jconsole vm.uptime  3344:289.977 s

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

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

jcmd <pid> thread.print -l

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

<a target="_blank" href="http://localhost:7000/oqlhelp/">http://localhost:7000/oqlhelp/</a>

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

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

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

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

在控制台输出结果:

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

每个Java开发者都应该知道的5个JDK工具

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

作为jvm融合战略的一部分,主要用来统一hotspot、jrockit vms。目前,jrockit mission control在标准版java se中已经可以使用。java mission control(jmc)与java flight recorder一起工作,适用于hotspot jvm,用来记录核心数据和事件。它是一个调优工具,并且适用于oracle jdk。一旦出现问题,这些数据就可以用来分析。 

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

每个Java开发者都应该知道的5个JDK工具
每个Java开发者都应该知道的5个JDK工具