本文将带大家了解一下经典的java命令行工具
javac&javap
首先是最基础的javac和javap,javac
Javac:编译
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30用法: javac <options> <source files>
其中, 可能的选项包括:
-g 生成所有调试信息
-g:none 不生成任何调试信息
-g:{lines,vars,source} 只生成某些调试信息
-nowarn 不生成任何警告
-verbose 输出有关编译器正在执行的操作的消息
-deprecation 输出使用已过时的 API 的源位置
-classpath <路径> 指定查找用户类文件和注释处理程序的位置
-cp <路径> 指定查找用户类文件和注释处理程序的位置
-sourcepath <路径> 指定查找输入源文件的位置
-bootclasspath <路径> 覆盖引导类文件的位置
-extdirs <目录> 覆盖所安装扩展的位置
-endorseddirs <目录> 覆盖签名的标准路径的位置
-proc:{none,only} 控制是否执行注释处理和/或编译。
-processor <class1>[,<class2>,<class3>...] 要运行的注释处理程序的名称; 绕过默认的搜索进程
-processorpath <路径> 指定查找注释处理程序的位置
-d <目录> 指定放置生成的类文件的位置
-s <目录> 指定放置生成的源文件的位置
-implicit:{none,class} 指定是否为隐式引用文件生成类文件
-encoding <编码> 指定源文件使用的字符编码
-source <发行版> 提供与指定发行版的源兼容性
-target <发行版> 生成特定 VM 版本的类文件
-version 版本信息
-help 输出标准选项的提要
-A关键字[=值] 传递给注释处理程序的选项
-X 输出非标准选项的提要
-J<标记> 直接将 <标记> 传递给运行时系统
-Werror 出现警告时终止编译
@<文件名> 从文件读取选项和文件名如果需要编译多个类,可以将他们的类名写在一个txt文件中:
class_info.txt
1
Test01.java Test02.java Test03.java -verbose
使用时指定文件
javac @class_info.txt
javap:反编译
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15javap <options> <classes>
-help --help -? 输出此用法消息
-version 版本信息,其实是当前javap所在jdk的版本信息,不是class在哪个jdk下生成的。
-v -verbose 输出附加信息(包括行号、本地变量表,反汇编等详细信息)
-l 输出行号和本地变量表
-public 仅显示公共类和成员
-protected 显示受保护的/公共类和成员
-package 显示程序包/受保护的/公共类 和成员 (默认)
-p -private 显示所有类和成员
-c 对代码进行反汇编
-s 输出内部类型签名
-sysinfo 显示正在处理的类的系统信息 (路径, 大小, 日期, MD5 散列)
-constants 显示静态最终常量
-classpath <path> 指定查找用户类文件的位置
-bootclasspath <path> 覆盖引导类文件的位置一般常用-v -l -c三个选项
输出结果到文件中
javap -c 类名.class > 文件名.txt
jps&jstat&jinfo
jps:与linux中ps功能类似,查看java虚拟机进程信息
1
2
3
4
5
6
7格式:jps [ options ] [ hostid ]
参数:
-q 不输出类名、Jar名和传入main方法的参数
-m 输出传入main方法的参数
-l 输出main类或Jar的全限名
-v 输出传入JVM的参数不指定hostId默认为本机
jstat:虚拟机统计信息监控工具
jstat [ option vmid [ interval [ s | ms ] [ count ] ] ]
、option:
vmid:虚拟机id(使用jps查到的id),linux上是进程id
interval和count:查询间隔和查询次数
jinfo:java配置信息工具,可以实时查看和修改虚拟机参数
1
2
3
4格式:jinfo [option] pid
参数:
-v 查看虚拟机启动时显式指定的参数列表
-flag name=value 修改一部分运行期可修改的虚拟机参数值
jmap&jhat&jstack
jmap:java内存映像工具,生成堆转储快照(heapdump或dump文件)
jmap [option] vmid
jhat:虚拟机堆转储快照分析工具,和jmap联合使用,不过较为简陋,后来的Eclipse Memory Analyzer和IBM HeapAnalyzer可以替代它的功能
格式:
jhat [-port 端口号] 文件路径
-port指定端口号,默认为7000
jstack:堆栈跟踪工具,生成虚拟机当前时刻的线程快照(threaddump或javacore文件)
1
2
3
4
5命令格式:jstack [option] vmid
参数:
-F 当正常输出的请求不被响应时,强制输出线程堆栈
-l 除了堆栈外,显示关于锁的附加信息
-m 显示本地方法的堆栈(C/C++)