`

5个java程序员应该掌握的JDK工具

 
阅读更多

   当我们打开java的按照路径,我们会在JAVA_HOME/bin/下发现jdk已经 捆绑了许多工具。毫无疑问,java.exe和javac.exe被所有的java开发者使用,也是最受欢迎的两个工具。但是其中的大部分工具对于普通的开发者来说,很少被临幸了。但是如果我们有效的使用这些工具,将会大大缩减我们的开发时间。

  以下是对java se 8JDK的工具们的一个合影,作为一枚爪哇人 ,我觉得我们都应该去了解他们一下,(至于翻不翻牌去临幸它们应人而异了)。

 

 以下5个工具,我觉得是在众多工具中比较鹤立鸡群的。

  1. javap
  2. jvisualvm
  3. jcmd
  4. jhat
  5. Oracle Java Mission Control

1.javap

作为一个java字节码反编译工具。下面我们编译一下hello.java,并将它反编译。

public class Hello
{
	public static void main(String[] args){
		System.out.println("hello world!");
	}
}

 当我们直接使用javap而不带任何附加参数时输入以下内容:默认会打印java类的包名、共有和保护的字段与方法。

E:\>javap Hello
Compiled from "Hello.java"
public class Hello extends java.lang.Object{
    public Hello();
    public static void main(java.lang.String[]);
}

 如果我们对javap添加-c参数,我们将会得到该java类的包含jvm指令的信息。

E:\>javap -c Hello
Compiled from "Hello.java"
public class Hello extends java.lang.Object{
public Hello();
  Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()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应用程序可视化的运行时信息。它本质上是使用jmap、jinfo、jstat、jstack、JConsole等来收集和分析数据。jvisualvm是跟随JDK6update7一块发布。现在又很多的插件可以继承到jvisualvm上,来让它功能更加强大。当我们的java应用程序遇到性能问题,jvisualvm便可大显身手。



 3.jcmd

jcmd被用做向jvm发送诊断命令请求,当我们直接运行jcmd而不附加任何参数,它默认会显示当前正在运行的JVM 进程。它等价于jps工具。

4.jhat

jhat是一个java堆的分析工具。它被用于解析和浏览java堆的dump文件。jhat能够解析java 堆dump信息并启动一个web服务。然后我们就可以通过浏览器来浏览java堆的dump信息。jhat支持对象查询语言(Object query language)和一些pre-designed 查询。

使用jmap来生成java堆的dump信息(即java应用程序的堆快照和对象统计信息),我们需要使用-dump选项。

jmap的选项:

C:\Users\Administrator>jmap
Usage:
    jmap -histo <pid>
      (to connect to running process and print histogram of java object heap
    jmap -dump:<dump-options> <pid>
      (to connect to running process and dump java heap)

    dump-options:
      format=b     binary default
      file=<file>  dump heap to <file>

    Example:       jmap -dump:format=b,file=heap.bin <pid>

 

以下是使用jmap生成pid为796的java程序的对象统计信息: 从输出我们可以看到内存中的实例数量和合计。

C:\Users\Administrator>jmap -histo 796 > E:/1.txt
 
num     #instances         #bytes  class name
----------------------------------------------
   1:         51249        6694928  <constMethodKlass>
   2:         33095        4723304  [C
   3:         84538        4457792  <symbolKlass>
   4:         51249        4104960  <methodKlass>
   5:          4563        2661744  <constantPoolKlass>
   6:          4563        1922624  <instanceKlassKlass>
   7:          3683        1542688  <constantPoolCacheKlass>
   8:          6941        1300904  [B
   9:         35773         858552  java.lang.String
  10:          8603         585184  [I
 .... ....

 jmap的另一个重要功能是获取java应用程序的当前堆快照信息

C:\Users\Administrator>jmap -dump:format=b,file=E:/2.hprof 796
Dumping heap to E:\2.hprof ...
Heap dump file created

 

以下是jhat可用的选项:

C:\Users\Administrator>jhat
ERROR: No arguments supplied
Usage:  jhat [-stack <bool>] [-refs <bool>] [-port <port>] [-baseline <file>] [-debug <int>] [-version] [-h|-help] <file>

        -J<flag>          Pass <flag> 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 <port>:     Set the port for the HTTP server.  Defaults to 7000
        -exclude <file>:  Specify a file that lists data members that should
                          be excluded from the reachableFrom query.
        -baseline <file>: 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 <int>:     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
        <file>            The file to read

For a dump file that contains multiple heap dumps,
you may specify which dump in the file
by appending "#<number>" to the file name, i.e. "foo.hprof#3".

All boolean options default to "true"

 现在我们可以用jhat来分析jmap导出的java应用程序堆快照信息:

C:\Users\Administrator>jhat E:/2.hprof
Reading from E:/2.hprof...
Dump file created Fri Nov 21 15:27:10 CST 2014
Snapshot read, resolving...
Resolving 213174 objects...
Chasing references, expect 42 dots..........................................
Eliminating duplicate references..........................................
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.

 解析完成后,我们可以再浏览器中输入:http://127.0.0.1:7000/来查看分析结果。



 

 

5.Oracle Java Mission Control

Java Mission Control是随同java JDK 7 update 40一同发布,同一了Hotspot、JRockit VMs,现在JRockit Mission Control也可以在标准的Java SE 中使用。但是目前只是开发和评估时free的,要是生产使用还是需要购买Oracle的license。

 Java Mission Control是同Java Flight Recorder一同工作的。可以同Hotspot VM一同工作并记录关键的数据和事件,一旦出现问题,这些数据可以用来分析问题。

启动Java Mission Control 工具利用指令jmc



 

 

  • 大小: 82.7 KB
  • 大小: 41.7 KB
  • 大小: 35.7 KB
  • 大小: 127.8 KB
  • 大小: 58.6 KB
分享到:
评论

相关推荐

    一个Java程序员应该掌握的10项技能

    Java程序员需要熟练掌握JDK(Java Development Kit)中的一系列常用命令及其选项。这些命令对于日常开发工作至关重要,能够帮助程序员高效地进行编译、运行、文档生成和调试等工作。具体来说,需要熟悉以下命令: -...

    一个Java程序员必须掌握的十项技能

    ### 一个Java程序员必须掌握的十项技能 在IT行业中,Java作为一种广泛使用的编程语言,其重要性不言而喻。对于希望在这个领域有所建树的开发者来说,掌握一定的核心技能是必不可少的。本文将详细介绍《一个Java...

    熟练的Java程序员应该掌握哪些技术.doc

    此外,一个熟练的Java程序员还应该: - 熟悉J2EE体系,包括Servlet、JSP、EJB等,并能使用主流的服务器如Tomcat、WebLogic、Jboss。 - 掌握Web开发框架,如Spring MVC、Struts、Hibernate等。 - 了解XML处理技术,...

    java程序员必须掌握的基础知识

    熟练掌握JDK自带的各种命令工具是提高工作效率的关键。以下是一些常用的命令及其功能概述: - **appletviewer**:用于运行包含Applet的HTML页面。 - **HtmlConverter**:将HTML文档转换为其他格式。 - **jar**:...

    JAVA 程序员常用参考文档

    Java是世界上最流行的编程语言之一,...总的来说,掌握JDK和JQuery对于一个Java程序员的成长至关重要。持续学习和查阅相关文档,不仅能提升编程技能,还能培养良好的编程习惯,这对于个人职业生涯的长远发展大有裨益。

    Java程序员需掌握的技能.docxJava程序员需掌握的技能.docx

    Java程序员在职业生涯中需要掌握一系列技能,以确保他们能够高效地开发、测试和维护软件系统。以下是基于给定文件中的内容,对Java程序员所需技能的详细说明: 1. **语法理解**:Java语法是编程的基础,程序员应能...

    java入门程序员必备jdk安装包--java.rar;该文件已安装好,解压后配置环境变量就可以

    对于初学者而言,掌握JDK的安装和配置是学习Java编程的第一步。 一、JDK的安装 1. 下载:首先,你需要从Oracle官网(https://www.oracle.com/java/technologies/javase-jdk-downloads.html)下载适合你操作系统的...

    Java 程序员眼中的 Linux - v1.0.pdf

    此外,本文档还涉及到了 Java 开发相关的工具和技术栈,如 Tomcat、Jenkins、Maven、Nexus 等,并且涵盖了 Linux 和 Java 的集成应用,如 SVN 安装和配置、JDK 安装、Mysql 安装和配置、Redis 安装和配置等。...

    Sun认证Java程序员考试

    Sun认证Java程序员考试,全称为SCJP(Sun Certified Java Programmer),是Oracle公司(原Sun Microsystems)推出的针对Java编程技能的一项专业认证。这个考试主要面向希望验证自己Java编程基础的开发者,旨在评估...

    java程序员自我介绍

    ### Java程序员自我介绍的关键知识点 #### 一、个人背景与教育经历 对于一名Java程序员而言,在...通过以上五个方面的详细阐述,可以帮助一名Java程序员在面试中更好地展现自己的综合能力,提高获得心仪工作的机会。

    java jdk java开发工具

    它包含了Java编译器、Java虚拟机(JVM)、Java类库以及一系列的开发和调试工具,是Java程序员的必备软件。这个压缩包文件显然包含了一个Java JDK的安装或者下载资源,可能是某个特定版本的,例如JDK 8、JDK 11或JDK ...

    Java程序员进化为架构师掌握的知识

    综上所述,一个Java程序员要成功进阶为架构师,必须在Java基础、算法、数据库、文件系统、系统、网络以及大型网站架构等方面都有深厚的功底和实践经验。这些知识构成了架构师必备的能力框架,帮助其在设计和优化系统...

    java程序员技术体系

    Java程序员技术体系是一个广泛而深入的学习领域,涵盖了从基础语法到高级特性的全面知识。对于初学者来说,理解并掌握这个体系有助于明确学习路径,并在职业生涯中不断进步。 首先,Java程序员应该熟悉Java开发环境...

Global site tag (gtag.js) - Google Analytics