首页 > 编程语言 >每个Java开发者都应该知道的5个JDK工具

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

时间:2023-08-01 17:07:05浏览次数:45  
标签:Java file JDK VM 开发者 heap 工具 public


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程序员都没有使用过这些工具,但如果使用,它们会让你的工作事半功倍。 




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

 


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

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


Java代码 

1. public class
2. public static void
3. "Hello World!");    
4.     }    
5. }

 


引用


C:\Users\Cycle\Desktop>javap HelloWorld


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


Java代码 


1. Compiled from "HelloWorld.java"
2. public class
3. public
4. public static void
5. }


 


引用


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


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


Java代码 

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


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


每个Java开发者都应该知道的5个JDK工具_数据库_02

 

在 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/后便会出来堆转储的详细情况: 


每个Java开发者都应该知道的5个JDK工具_数据库_03

 

例如,还可以在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工具。 


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

 

 


每个Java开发者都应该知道的5个JDK工具_数据库_05

 

标签:Java,file,JDK,VM,开发者,heap,工具,public
From: https://blog.51cto.com/u_6174294/6924378

相关文章

  • 计算机基础与JavaScript初识
    一:编程介绍编程:就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程.计算机程序:就是计算机所执行的一系列的指令集合,而程序全部都是用我们所掌握的语言来编写的,所以人们要控制计算机一定要通过计算机语言向计算机发出命令。从事编程的人员,就是程......
  • java jsch sftp 中文乱码解决方案
    不同jsch版本对比--->JavaSSH/Sftp库——JSch/SSHJ方案一:maven版本:<dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version></dependency>代码案例:packagecom.ch......
  • 从Java后端获取时间配置字符串,并在前端使用它来设置默认公布时间。
    <divclass="layui-inline"id="AItem"><labelclass="layui-form-labelsyn-form-item-require">公布时间:</label><divclass="layui-input-block">&......
  • 学习Java的第11天
    运算符算数运算符:+,-,*,/,%,++,--赋值运算符:=关系运算符:>,<,>=,<=,==,!=instanceof逻辑运算符:&&,||,!位运算符:&,|,^,~,>>,<<,>>>(了解!!!)条件运算符?:扩展赋值运算符:+=,-=,*=,/=packageoperator;publicclassDemo03{publicstaticv......
  • 学生信息管理小系统(Java)
    一、题目要求 需要实现对应的操作二、思路(1)先设计一个主菜单界面,用户可以选择对应的功能;(2)每个板块对应一个方法,实现具体的操作;(3)最后在main函数中使用switch方法根据用户的选择对应不同的结果;三、代码1importjava.util.ArrayList;2importjava.util.Scanner;3......
  • JavaScript基础02
    隐式类型转换加法运算中,如果参与运算的有一个值不是数字,另外一个值是数字,会将数字隐式转换成字符串再与数字进行拼接减乘除取余运算中,如果有非数字,会将它隐式转成数值,然后参与运算;如果参与运算存在NaN,那么得到的是NaN运算符算术运算符+-*/%一元运算符++自增--自......
  • java并发之锁的升级
    偏向锁-->轻量级锁-->重量级锁,是synchronized的三种形态转换。 锁可以升级但不能降级,意味着偏向锁升级成轻量级锁后不能降级成偏向锁。这种锁升级却不能降级的策略,目的是为了提高获得锁和释放锁的效率。 线程的状态:就绪队列可能随时被CPU选中执行;阻塞队列需要等其他......
  • Java之String系列--String, StringBuffer, StringBuilder区别
    简介本文介绍Java的String,StringBuffer,StringBuilder的区别。项StringStringBufferStringBuffer线程安全性不可变。原因:value数组是final类型。因为不可变,所以每次操作生成新对象。因为不可变,所以每次操作生成新对象。原因:value数组是final类型。原因:其父类(AbstractStringBuilder......
  • Java实现读取Excel文件并逐行写入到新的Excel文件中
    在日常开发中,经常需要处理Excel文件,其中一种常见的需求是将原始Excel文件的内容逐行写入到新的Excel文件中或者写入数据中。本篇博客将介绍使用Java编程语言以及ApachePOI库来实现这一功能。ApachePOI是一个开源的Java库,用于处理MicrosoftOffice格式的文件,包括Excel。1.环境......
  • javase学习文档
      javase学习文档(更新)javase学习文档已更新查看地址:https://talentestors.gitee.io/my-notes/codenotes/javase/......