JDK与JRE

在说这些工具之前先了解一下JDK与JRE之间的区别吧

JDK: java development kit(java开发工具)

JRE: java runtime environment (java运行时环境)

JDK是java开发工具包,它提供了Java开发环境和运行环境,可以这样说,在JDK中包含了JRE。

看一下JDK目录结构(这里以jdk1.8.0_301举例)

bin:存放了JDK的各种命令,常用的javac、java等(接下来会展开细说)

include:一些平台特定的头文件,支持Java本地接口和Java虚拟机调试程序接口的本地编程技术。(C)

jre:运行java程序所必需的环境

legal:法律文件

lib:JDK工具命令的实际执行程序

man:JDK中命令的一些接口文档

javafx-src.zip:Java FX所有核心类库的源代码,JavaFX它是一种声明式,静态类型的编程语言。(jdk1.8下新加)

src.zip:Java所有核心类库的源代码

bin

bin文件下存放了JDK的各种辅助开发的命令,来了解一下

监控

jps:JVM Proccess Status Tool显示指定系统内所有正在运行的HotSpot虚拟机进程,包括进程ID,进程启动的路径及启动参数等。

1
jps [options] [hostid]

一般我的使用

1
jps -ml | grep [服务关键词]

输出虚拟机进程启动时传递给主类main()函数的参数,输出主类的全名,如果进程执行的Jar包,输出Jar的路径

jstat:JVM Statistics Monitoring Tool监视虚拟机运行状态的信息,本地或者远程的虚拟机进程中类装载、内存、垃圾收集、JIT编译等运行数据

监视虚拟机运行状态的信息,本地或者远程的虚拟机中类装载,内存,垃圾手机,JIT编译等运行数据

1
jstat [option vmid [interval [s/ms][count]]]

一些我常用的选项

1
2
3
4
5
-gc //监视Java堆状况,包括Eden区,两个survivor区、老年代、永久代等的容量,已用空间、GC时间合计等信息
-gcnew //监视新生代GC情况
-gcold //监视老年代GC情况

jstat -gc vmid 3000
显示列名 具体描述
S0C 年轻代中第一个survivor(幸存区)的容量 (字节)
S1C 年轻代中第二个survivor(幸存区)的容量 (字节)
S0U 年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
S1U 年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
EC 年轻代中Eden(伊甸园)的容量 (字节)
EU 年轻代中Eden(伊甸园)目前已使用空间 (字节)
OC Old代的容量 (字节)
OU Old代目前已使用空间 (字节)
PC Perm(持久代)的容量 (字节)
PU Perm(持久代)目前已使用空间 (字节)
YGC 从应用程序启动到采样时年轻代中gc次数
YGCT 从应用程序启动到采样时年轻代中gc所用时间(s)
FGC 从应用程序启动到采样时old代(全gc)gc次数
FGCT 从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT 从应用程序启动到采样时gc用的总时间(s)

jinfo:Java配置信息工具,实时查看和调整虚拟机参数

1
jinfo [option] pid

一些常用的选项

1
2
3
4
5
6
-flag <name> //打印指定name的JVM flag
-flag [+/-]<name> //启用或者禁用指定name的JVM flag
-flag <name>=<value> //设置指定名称的name flag为给定的值
-flags 打印JVM flags

jinfo -flags pid

jmap:Java内存映像工具,用于生成堆转储文件

1
jmap [option] vmid
1
2
3
-dump //生成Java对转存储快照,格式为: -dump[livem ]format=b, file=<filename>, 其中live子参数说明是否只dump出存活的对象

-heap //显示Java堆详细信息,如使用哪种回收器、参数配置、分代状况等

jstack:Java堆栈跟踪工具,生成虚拟机当前时刻线程的快照

1
jstack [option] vmid
1
2
3
-F //当正常输出的请求不被响应时,强制输出线程堆栈
-l //除堆栈外,显示关于锁的附加信息
-m //如果调用到本地方法的话,可以显示C/C++的堆栈

一些其他的常用的命令

javadoc:根据Java源代码及其说明语句生成的HTML文档;

javap:Java反汇编器,显示编译类文件中的可访问功能和数据,同事显示字节代码含义;

javac:Java编译器,将Java源代码换成字节码;

java:Java编译器,直接从类文件执行Java应用程序代码