前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >jdk文件bin目录中各种工具的作用(javac\javap\java\jarjstat\jvadoc等)

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

作者头像
洋仔聊编程
发布2019-01-15 17:29:45
2.1K0
发布2019-01-15 17:29:45
举报

一、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:

?? ?代码如下:

代码语言:javascript
复制
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

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年06月27日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ?? ?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,以二进制输出成文本。
相关产品与服务
微服务引擎 TSE
微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com