当我们打开java的按照路径,我们会在JAVA_HOME/bin/下发现jdk已经 捆绑了许多工具。毫无疑问,java.exe和javac.exe被所有的java开发者使用,也是最受欢迎的两个工具。但是其中的大部分工具对于普通的开发者来说,很少被临幸了。但是如果我们有效的使用这些工具,将会大大缩减我们的开发时间。
以下是对java se 8JDK的工具们的一个合影,作为一枚爪哇人 ,我觉得我们都应该去了解他们一下,(至于翻不翻牌去临幸它们应人而异了)。
以下5个工具,我觉得是在众多工具中比较鹤立鸡群的。
- javap
- jvisualvm
- jcmd
- jhat
- 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
相关推荐
Java程序员需要熟练掌握JDK(Java Development Kit)中的一系列常用命令及其选项。这些命令对于日常开发工作至关重要,能够帮助程序员高效地进行编译、运行、文档生成和调试等工作。具体来说,需要熟悉以下命令: -...
### 一个Java程序员必须掌握的十项技能 在IT行业中,Java作为一种广泛使用的编程语言,其重要性不言而喻。对于希望在这个领域有所建树的开发者来说,掌握一定的核心技能是必不可少的。本文将详细介绍《一个Java...
此外,一个熟练的Java程序员还应该: - 熟悉J2EE体系,包括Servlet、JSP、EJB等,并能使用主流的服务器如Tomcat、WebLogic、Jboss。 - 掌握Web开发框架,如Spring MVC、Struts、Hibernate等。 - 了解XML处理技术,...
熟练掌握JDK自带的各种命令工具是提高工作效率的关键。以下是一些常用的命令及其功能概述: - **appletviewer**:用于运行包含Applet的HTML页面。 - **HtmlConverter**:将HTML文档转换为其他格式。 - **jar**:...
Java是世界上最流行的编程语言之一,...总的来说,掌握JDK和JQuery对于一个Java程序员的成长至关重要。持续学习和查阅相关文档,不仅能提升编程技能,还能培养良好的编程习惯,这对于个人职业生涯的长远发展大有裨益。
对于初学者而言,掌握JDK的安装和配置是学习Java编程的第一步。 一、JDK的安装 1. 下载:首先,你需要从Oracle官网(https://www.oracle.com/java/technologies/javase-jdk-downloads.html)下载适合你操作系统的...
Java程序员在职业生涯中需要掌握一系列技能,以确保他们能够高效地开发、测试和维护软件系统。以下是基于给定文件中的内容,对Java程序员所需技能的详细说明: 1. **语法理解**:Java语法是编程的基础,程序员应能...
此外,本文档还涉及到了 Java 开发相关的工具和技术栈,如 Tomcat、Jenkins、Maven、Nexus 等,并且涵盖了 Linux 和 Java 的集成应用,如 SVN 安装和配置、JDK 安装、Mysql 安装和配置、Redis 安装和配置等。...
Sun认证Java程序员考试,全称为SCJP(Sun Certified Java Programmer),是Oracle公司(原Sun Microsystems)推出的针对Java编程技能的一项专业认证。这个考试主要面向希望验证自己Java编程基础的开发者,旨在评估...
### Java程序员自我介绍的关键知识点 #### 一、个人背景与教育经历 对于一名Java程序员而言,在...通过以上五个方面的详细阐述,可以帮助一名Java程序员在面试中更好地展现自己的综合能力,提高获得心仪工作的机会。
它包含了Java编译器、Java虚拟机(JVM)、Java类库以及一系列的开发和调试工具,是Java程序员的必备软件。这个压缩包文件显然包含了一个Java JDK的安装或者下载资源,可能是某个特定版本的,例如JDK 8、JDK 11或JDK ...
综上所述,一个Java程序员要成功进阶为架构师,必须在Java基础、算法、数据库、文件系统、系统、网络以及大型网站架构等方面都有深厚的功底和实践经验。这些知识构成了架构师必备的能力框架,帮助其在设计和优化系统...
Java程序员技术体系是一个广泛而深入的学习领域,涵盖了从基础语法到高级特性的全面知识。对于初学者来说,理解并掌握这个体系有助于明确学习路径,并在职业生涯中不断进步。 首先,Java程序员应该熟悉Java开发环境...