每个java开发者都应该知道的5个jdk工具-mile米乐体育

jdk是java语言的软件开发工具包,没有它就无法编译java程序。目前,有许许多多的jdk工具呈现在大家面前,但最常用的莫过于java.exe、javac.exe、jar等。除了这几个,还有哪些呢?本文作者joe拥有多年的java开发经验,其在博客上分享了一篇文章:5 jdk tools every java developer should know,笔者对其进行了编译,以下为译文。

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

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

1.javap

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

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字段和方法。

compiled from "helloworld.java" public class helloworld {   public helloworld();   public static void main(java.lang.string...); }

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

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

compiled from "helloworld.java" public class helloworld {   public helloworld();     code:        0: aload_0        1: invokespecial #1                  // method java/lang/object."":()v        4: return    public static void main(java.lang.string...);     code:        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 }

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 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工具。

展开全文
内容来源于互联网和用户投稿,文章中一旦含有米乐app官网登录的联系方式务必识别真假,本站仅做信息展示不承担任何相关责任,如有侵权或涉及法律问题请联系米乐app官网登录删除

最新文章

网站地图