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 | -gc //监视Java堆状况,包括Eden区,两个survivor区、老年代、永久代等的容量,已用空间、GC时间合计等信息 |
显示列名 | 具体描述 |
---|---|
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 | -flag <name> //打印指定name的JVM flag |
jmap:Java内存映像工具,用于生成堆转储文件
1 | jmap [option] vmid |
1 | -dump //生成Java对转存储快照,格式为: -dump[livem ]format=b, file=<filename>, 其中live子参数说明是否只dump出存活的对象 |
jstack:Java堆栈跟踪工具,生成虚拟机当前时刻线程的快照
1 | jstack [option] vmid |
1 | -F //当正常输出的请求不被响应时,强制输出线程堆栈 |
一些其他的常用的命令
javadoc:根据Java源代码及其说明语句生成的HTML文档;
javap:Java反汇编器,显示编译类文件中的可访问功能和数据,同事显示字节代码含义;
javac:Java编译器,将Java源代码换成字节码;
java:Java编译器,直接从类文件执行Java应用程序代码