0%

Java命令行工具

本文将带大家了解一下经典的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
    15
    javap <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++)