jdk的一些命令行工具

相信很多初中级的程序员,对jdk既熟悉又很陌生,因为我们天天都在使用jdk,但是却并不了解它有哪些功能,只知它是运行Java程序必不可少的工具;今天我们就来初步了解一下jdk的命令行工具。通过下面3个问题,我们一起来了解一下jdk的命令行工具(本文使用的jdk版本:jdk1.8.0_65);

(1)什么是jdk?有什么功能?

(2)jdk有哪些常用的命令行工具?

(3)jdk命令行工具都有什么作用?

 

JDK:Java Development Kit,即Java语言的软件开发工具包,是整个Java开发的核心,它包含了Java的运行环境,Java工具和Java的基础类库,本章主要介绍jdk中几个常用的Java工具;

 

常用的Java工具所在目录/jdk1.8.0_65/bin该目录下的命令行工具基本上都是jdk/lib/tools.jar类库的一层简单封装,主要功能代码是在tools类库中实现的;

 

Java的运行环境所在目录:/jdk1.8.0_65/jre


Java的基础类库所在目录:/dk1.8.0_65/lib


无论是Java运行环境还是Java工具,都是依赖Java的基础类库实现的,它们不能脱离Java类库而单独运行。有兴趣的童鞋可以去看看tools.jar的实现,本章所介绍的几个常用命令工具(java、javac、jps、jstat、jinfo、jmap、jstack)的实现都能在里面看到:


 

 

下面介绍一下常用的、与JVM性能相关的几个Java工具:

java.exe:用于执行java类或jar文件

命令格式:java [-options] class [args...](执行类)  或   java [-options] -jar jarfile [args...](执行jar文件

 

javac.exe:将.java文件编译成二进制字节码的.class文件

命令格式:javac <options> <source files>

jps.exe:JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程;

jps -l:输出主类的全名,如果进程执行的是Jar包,输出Jar路径;

jps -q:只输出本地虚拟机唯一线程id(LVMID),省略主类的名称;

jps -m:输出虚拟机进程启动时传递给主类main()函数的参数; jps -v:输出虚拟机进程启动时JVM参数;

线程ID(43452)是我在本地启动的一个springboot项目,以下部分的操作是基于该线程ID来进行操作的;

 

 

jstat.exe:jstat用于监视虚拟机各种运行状态信息的命令行工具,它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据,在没有GUI图形界面,只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首选工具;

jstat命令格式:jstat option vmid interval(s|ms) count,如果省略interval和count则表示只查询一次; 

vmid:虚拟机进程id,如果是本地虚拟机进程,VMID与lvmid是一直的,如果是远程虚拟机进程,那vmid格式为 protocol://lvmid[@hostname[:port]/servername];

interval:查询间隔,隔多少秒/毫秒查询一次;

count:查询次数;

option:代表虚拟机需要查询的虚拟机信息,主要分为3类:类装载,垃圾收集和运行期编译状况;


例如:jstat -gc 43452 3000 2 表示每3秒查询一次进程43452的gc情况,总共查询2次;下面列举部分jstat命令:


jstat命令打印出来的参数描述可参考:http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstat.html#class_option

 

 

 

jinfo.exe:Configuration Info for Java,显示虚拟机配置信息,其作用是实时查看和调整虚拟机的各项参数

 jinfo命令格式:jinfo option vmid

修改虚拟机某个参数值:jinfo -flag name=value vmid

查看虚拟机某个参数值:jinfo -flag name vmid

 

jmap.exe:Memory Map for Java,生成虚拟机的内存转储快照(heapdump文件);是Java内存映像工具,其作用可以获取dump文件,查询finalize执行队列、Java堆和永久代的详细信息,如空间使用率、当前用的是哪种收集器。

jamp命令格式:jmap option vmid

普通用户在C盘下是没有权限生成虚拟机的内存转储快照,只有管理员才用权限

下面是使用G盘下的jdk生成的虚拟机的内存转储快照,可以在G:\jdk1.8.0_65\bin目录下找到名为“57460dump.bin”的快照

jhat.exe:JVM Heap Dump Browser,用于分析heapdump文件,它会建立一个HTTP/HTML服务器,让用于可以在浏览器上查看分析结果;

命令格式:jhat 【dump文件


执行完jhat命令后,在浏览器中 输入http://localhost:7000可查看分析结果

jstack.exe:Stack Trace for Java,显示虚拟机的线程快照;用于生产虚拟机当前时刻的线程快照,线程快照就是当前虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目的是定位线程出现多长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间等待等导致线程长时间停顿的常见原因。

jstack命令格式:jstack [option] vmid


强制输出线程堆栈:


 

 

 

以上只是简单的介绍了jdk的一些命令行工具,掌握了以上的基本命令,对java虚拟机性能监控也会更加熟悉;要想深入了解jdk,最好是自己动手练一下,并且去看一下它的实现源码(tools.jar文件中),了解jdk的实现思路;

猜你喜欢

转载自youcp999.iteye.com/blog/2346793