jdk文件bin目录中各种工具的作用(javac\javap\java\jarjstat\jvadoc等)

一、javac
javac是用来编译.java文件的。将.java源文件编译为.class文件。
1.用法: 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 <路径>        指定查找注释处理程序的位置
  -parameters                生成元数据以用于方法参数的反射
  -d <目录>                    指定放置生成的类文件的位置
  -s <目录>                    指定放置生成的源文件的位置
  -h <目录>                    指定放置生成的本机标头文件的位置
  -implicit:{none,class}     指定是否为隐式引用文件生成类文件
  -encoding <编码>             指定源文件使用的字符编码
  -source <发行版>              提供与指定发行版的源兼容性
  -target <发行版>              生成特定 VM 版本的类文件
  -profile <配置文件>            请确保使用的 API 在指定的配置文件中可用
  -version                   版本信息
  -help                      输出标准选项的提要
  -A关键字[=值]                  传递给注释处理程序的选项
  -X                         输出非标准选项的提要
  -J<标记>                     直接将 <标记> 传递给运行时系统
  -Werror                    出现警告时终止编译
  @<文件名>                     从文件读取选项和文件名
2.简单使用
    javac -d destdir srcFile
    其中:1、-d destdir是用来指定存放编译生成的.class文件的路径。(若此选项省略,那么默认在当前目录下生成.class文件,并且没有生成包文件夹;当前目录可以用“.”来表示,即:javac -d . srcFile )
    注意:添加-d选项除了可以指定编译生成的.class文件的路径外,最大的区别是可以将源文件首行的package关键字下的包名在当前路径下生成文件夹。
    srcFile是源文件.java文件的路径。
    例如:有这样一个简单的java类,路径为E:\test\JavacTest.java:
    代码如下:
   
 package com.stopTalking.test;      public class JavacTest {          public static void main(String[] args) {      
        byte a = 5;       
        short b = 6;       
        System.out.println("JavacTest [a=" + a + ", b=" + b +  "]");       
        }       
    }

当前路径下,输入 javac JavacTest.java ,便在当前路径下生成了一个JavacTest.class的文件,如图:
    注意:JavacTest.java是一个首行标注了package的java文件,而此时它在硬盘上的目录并未对应它的包名,所以,使用java com.stopTalking.test.JavacTest运行时是无法找到该java的。
若输入,javac –d . JavacTest.java ,那么生成的JavacTest.class便在当前目录下生成的包文件中了,如图:
二、java
运行一个.class或者.jar文件,产生运行效果。
1:用法: java [-options] class [args...]     (执行类) 或  java [-options] -jar jarfile [args...] (执行 jar 文件)
    其中选项包括:
    -d32              使用 32 位数据模型 (如果可用)
    -d64              使用 64 位数据模型 (如果可用)
    -server           选择 "server" VM 默认 VM 是 server.

    -cp    <目录和 zip/jar 文件的类搜索路径>
    -classpath <目录和 zip/jar 文件的类搜索路径>   用 ; 分隔的目录, JAR 档案  和 ZIP 档案列表, 用于搜索类文件。
    -D<名称>=<值>                                              设置系统属性
    -verbose:[class|gc|jni]                                        启用详细输出
    -version                                                              输出产品版本并退出

    -showversion                  输出产品版本并继续
    -? -help                          输出此帮助消息
    -X                                   输出非标准选项的帮助
    -ea[:<packagename>...|:<classname>]
    -enableassertions[:<packagename>...|:<classname>]
                                  按指定的粒度启用断言
    -da[:<packagename>...|:<classname>]
    -disableassertions[:<packagename>...|:<classname>]
                                  禁用具有指定粒度的断言
    -esa | -enablesystemassertions            启用系统断言
    -dsa | -disablesystemassertions             禁用系统断言
    -agentlib:<libname>[=<选项>]
                  加载本机代理库 <libname>, 例如 -agentlib:hprof
                  另请参阅 -agentlib:jdwp=help 和 -agentlib:hprof=help
    -agentpath:<pathname>[=<选项>]
                  按完整路径名加载本机代理库
    -javaagent:<jarpath>[=<选项>]
                  加载 Java 编程语言代理, 请参阅 java.lang.instrument
    -splash:<imagepath>            使用指定的图像显示启动屏幕

2.简单使用(运行Work1.class文件,不要写.class后缀!!)
总结:使用简单的java命令运行一个.class文件,不仅需要使用该类的全限定类名,而且需要在当前路径下有该类的包层次文件夹。这必须要求编译时使用-d选项。否则需要自己来建立包层次文件夹。
三:jstat
    可以查看堆内存各部分的使用量,以及加载类的数量。
    1.用法: jstat [options] VMID [interval] [count]
         [options] : 操作参数,一般使用 -gcutil 查看gc情况
         VMID : 本地虚拟机进程ID,即当前运行的java进程号
         [interval] : 连续输出的时间间隔,单位为秒或者毫秒
         [ count] : 连续输出的次数,如果缺省打印无数次
    
        option 参数总览: 
Option
Displays
class
类加载的行为统计。Statistics on the behavior of the class loader.
compiler
HotSpt JIT编译器行为统计。Statistics of the behavior of the HotSpot Just-in-Time compiler.
gc
垃圾回收堆的行为统计。Statistics of the behavior of the garbage collected heap.
gccapacity
各个垃圾回收代容量(young,old,perm)和他们相应的空间统计。Statistics of the capacities of the generations and their corresponding spaces.
gcutil
垃圾回收统计概述(百分比)。Summary of garbage collection statistics.
gccause
垃圾收集统计概述(同-gcutil),附加最近两次垃圾回收事件的原因。Summary of garbage collection statistics (same as -gcutil), with the cause of the last and
gcnew
新生代行为统计。Statistics of the behavior of the new generation.
gcnewcapacity
新生代与其相应的内存空间的统计。Statistics of the sizes of the new generations and its corresponding spaces.
gcold
年老代和永生代行为统计。Statistics of the behavior of the old and permanent generations.
gcoldcapacity
年老代行为统计。Statistics of the sizes of the old generation.
gcpermcapacity
永生代行为统计。Statistics of the sizes of the permanent generation.
printcompilation
HotSpot编译方法统计。HotSpot compilation method statistics.
四:appletviewer:
         小程序浏览器,一种执行HTML文件上的Java小程序类的Java浏览器 ,用的特别少,在这里就不做详细介绍了。
五:javadoc:
        根据Java源代码及其说明语句生成的HTML文档。
    1.用法: javadoc [options] [packagenames] [sourcefiles] [@files]
    2.参数(部分)
  -overview <file>                 从 HTML 文件读取概览文档
  -public                          仅显示 public 类和成员
  -protected                       显示 protected/public 类和成员 (默认值)
  -package                         显示 package/protected/public 类和成员
  -private                         显示所有类和成员
  -help                            显示命令行选项并退出
    。。。
    通过标准 doclet 提供: doclet可以代替javadoc的输出,借由javadoc可以获取源码几乎所有的信息,类名、类变量、类方法、方法参数、注解、javadoc注释等都可以获取到,然后根据自己的需要把关心的信息输出成自定的格式。
  -d <directory>                   输出文件的目标目录
  -use                             创建类和程序包用法页面
  -version                         包含 @version 段
  -author                          包含 @author 段
  -docfilessubdirs                 递归复制文档文件子目录
     。。。
    3.简单使用(创建仅显示 public 类和成员的Work1.java的javadoc文档,存放在当前目录下的Work1_Javadoc目录中)
    
    产生的文件如下图所示,功能还是挺强大的,当然使用doclet也可以自定义doc格式。
        
六:jdb:
    Java调试器,可以逐行地执行程序、设置断点和检查变量。
    1.用法: jdb <options> <class> <arguments>
        <class>                         是要开始调试的类的名称
        <arguments>                 是传递到 <class> 的 main() 方法的参数
    2.<options>各种参数
    -help             输出此消息并退出
    -sourcepath <由 ";" 分隔的目录>        要在其中查找源文件的目录
    -attach <address>                             使用标准连接器附加到指定地址处正在运行的 VM
    -listen <address>                               等待正在运行的 VM 使用标准连接器在指定地址处连接
    -listenany                                            等待正在运行的 VM 使用标准连接器在任何可用地址处连接
    -launch                                                立即启动 VM 而不是等待 'run' 命令
    -listconnectors                                   列出此 VM 中的可用连接器
    -connect <connector-name>:<name1>=<value1>,...    使用所列参数值通过指定的连接器连接到目标 VM
    -dbgtrace [flags]             输出信息供调试jdb
    -tclient                              在 HotSpot(TM) 客户机编译器中运行应用程序
    -tserver                              在 HotSpot(TM) 服务器编译器中运行应用程序
    转发到被调试进程的选项:
    -v -verbose[:class|gc|jni]                启用详细模式
    -D<name>=<value>                  设置系统属性
    -classpath <由 ";" 分隔的目录>        列出要在其中查找类的目录
    -X<option>                        非标准目标 VM 选项
    3.简单使用(debug Work1,要有Work1.class文件才可以,写文件名的时候不用写后缀名,不然会报错!)‘
    进入jdb后,输入各种参数进行调试。在此期间会启动 vm(虚拟机)执行这段代码!
       
七:javah:
    产生可以调用Java过程的C过程,或建立能被Java程序调用的C过程的头文件。
    Javah获取您的Java源文件并生成C头文件,其中包含您的Java代码中所有本机方法的JNI存根(stub)。如果您正在生成一个类的JNI存根,而且您已经把这个类定义为包的一部分,那么您必须指定完全限定的类名。
   1.用法: javah [options] <classes>
    <classes> 是使用其全限定名称指定的   (例如, java.lang.Object)。
   其中, [options] 包括:
  -o <file>                输出文件 (只能使用 -d 或 -o 之一)
  -d <dir>                 输出目录
  -v  -verbose             启用详细输出
  -h  --help  -?           输出此消息
  -version                 输出版本信息
  -jni                     生成 JNI 样式的标头文件 (默认值)
  -force                   始终写入输出文件
  -classpath <path>        从中加载类的路径
  -cp <path>               从中加载类的路径
  -bootclasspath <path>    从中加载引导类的路径
    2.简单使用(使用-v参数启用详细输出,-jni后面的 路径是 包名+类名
    
    操作后会产生一个Work1.h文件
  
八:javap:
    java反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代码含义。
    1.用法: javap <options> <classes>
      其中, 可能的选项包括:
  -help  --help  -?            输出此用法消息
  -version                         版本信息
  -v  -verbose                  输出附加信息
  -l                                   输出行号和本地变量表
  -public                          仅显示公共类和成员
  -protected                    显示受保护的/公共类和成员
  -package                      显示程序包/受保护的/公共类和成员 (默认)
  -p  -private                     显示所有类和成员
  -c                                   对代码进行反汇编
  -s                                   输出内部类型签名
  -sysinfo                         显示正在处理的类的系统信息 (路径, 大小, 日期, MD5 散列)
  -constants                     显示最终常量
  -classpath <path>        指定查找用户类文件的位置
  -cp <path>                   指定查找用户类文件的位置

  -bootclasspath <path>    覆盖引导类文件的位置
    2.简单使用
    直接javap 类文件,将.clss文件反编译为源代码(经过优化后的代码)
    
    使用-c命令,将.class文件反汇编(不等于反编译)为汇编语言
    
九:jar
    多用途的存档及压缩工具,是个java应用程序,可将多个文件合并为单个JAR归档文件。
    1.用法: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
    选项:
    -c  创建新档案
    -t  列出档案目录
    -x  从档案中提取指定的 (或所有) 文件
    -u  更新现有档案
    -v  在标准输出中生成详细输出
    -f  指定档案文件名
    -m  包含指定清单文件中的清单信息
    -n  创建新档案后执行 Pack200 规范化
    -e  为捆绑到可执行 jar 文件的独立应用程序
        指定应用程序入口点
    -0  仅存储; 不使用任何 ZIP 压缩
    -P  保留文件名中的前导 '/' (绝对路径) 和 ".." (父目录) 组件
    -M  不创建条目的清单文件
    -i  为指定的 jar 文件生成索引信息
    -C  更改为指定的目录并包含以下文件
       如果任何文件为目录, 则对其进行递归处理。
清单文件名, 档案文件名和入口点名称的指定顺序
与 'm', 'f' 和 'e' 标记的指定顺序相同。
    2.简单使用
     将两个类文件(Work1.class,  fanxing.class)归档到一个名为 classes.jar 的档案中:
      
      会在当前目录下产生一个名为classes.jar的文件

十:jcmd
         一个多功能的工具,可以用它来导出堆、查看Java进程、导出线程信息、执行GC、还可以进行采样分析(jmc 工具的飞行记录器)。
         详细请看博客:  https://www.jianshu.com/p/388e35d8a09b
十一:jconsole
    一个java GUI监视工具,可以以图表化的形式显示各种数据。并可通过远程连接监视远程的服务器VM。用java写的GUI程序,用来监控VM,并可监控远程的VM,非常易用,而且功能非常强。命令行里打 jconsole,选想要监视的 进程就可以了。
    
十二:其它关于jvm性能调优的工具: jdeps,jhat,jinfo,jmap,jstack,jps

    jstatd:jstatd是一个基于RMI(Remove Method Invocation)的服务程序,它用于监控基于HotSpot的JVM中资源的创建及销毁,并且提供了一个远程接口允许远程的监控工具连接到本地的JVM执行命令。jstatd是基于RMI的,所以在运行jstatd的服务器上必须存在RMI注册中心,如果没有通过选项”-p port”指定要连接的端口,jstatd会尝试连接RMI注册中心的默认端口。

    jhat:用于对JAVA heap进行离线分析的工具,他可以对不同虚拟机中导出的heap信息文件进行分析,如Linux上导出的文件可以拿到WINDOWS上进行分析,可以查找诸如内存方面的问题。

    jinfo:jinfo 可以输出并修改运行时的java 进程的opts。

    jmap:打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。

     jstat: Jstat 用于监控基于HotSpot的JVM,对其堆的使用情况进行实时的命令行的统计,使用jstat我们可以对指定的JVM做如下监控:
  • 类的加载及卸载情况
  • 查看新生代、老生代及持久代的容量及使用情况
  • 查看新生代、老生代及持久代的垃圾收集情况,包括垃圾回收的次数及垃圾回收所占用的时间
  • 查看新生代中Eden区及Survior区中容量及分配情况等
     jstack : jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项”-J-d64”。

     jps: 用来查看基于HotSpot的JVM里面中,所有具有访问权限的Java进程的具体状态, 包括进程ID,进程启动的路径及启动参数等等,与unix上的ps类似,只不过jps是用来显示java进程,可以把jps理解为ps的一个子集。使用jps时,如果没有指定hostid,它只会显示本地环境中所有的Java进程;如果指定了hostid,它就会显示指定hostid上面的java进程,不过这需要远程服务上开启了jstatd服务。
    这几个命令的详细用法请看博客:   https://www.cnblogs.com/barrywxx/p/8576390.html       https://www.cnblogs.com/ityouknow/p/5714703.html    





猜你喜欢

转载自blog.csdn.net/csdn___lyy/article/details/80832122