您的位置:首页 > 编程语言 > Java开发

Java程序常用工具

2014-06-06 13:28 183 查看
添加网址超链接后,博客无法发布,会出现以下问题:



因此,本文的所有网址都取消了超链接,同时将网址协议的"http://"也给取消了,如果无法访问,添加上该协议即可。

Java7的所有工具命令详细描述见:docs.oracle.com/javase/7/docs/technotes/tools/index.html

javac Java源程序编译命令

描述:
javac
(Java Programming Language Compiler) java程序编译器,用于将Java源程序编译为JVM能够识别的二进制字节码文件,同时,javac工具还能够处理源程序或者类文件中的注解信息。可以通过如下两种方式为javac指定需要编译的源文件信息:
1)、如果需要编译的文件比较少,直接在javac的命令行参数中列出源文件即可
2)、如果需要编译的文件比较多,可以需要编译的文件名写入到一个文件中,文件名之间以空格或者换行符隔开,如果文件路径中含有空格,则将路径放到双引号中,然后以@argfiles的形式将文件名提供给javac即可。argfiles中,不允许有*.java字样出现,不允许出现递归的@subargfiles形式,但是可以将参数和文件名分别放到不同的argfile中,然后同时提供给javac(javac
@options @classes 或者 javac @path1\options @path2\classes)
需要编译的源文件必须以.java为后缀,提供给javac的类文件必须以.class为后缀。
javac有一些标准的选项,这些选项在后续版本的javac中仍然会很好的支持,同时javac还有一些非标准选项,这些选择在当前版本的javac中支持,可能在后续版本的javac中会有所更改,非标准选项通过-X指定。
格式:
javac [
options ] [ sourcefiles ] [ classes ] [ @argfiles ]
ooptions:命令行选项
sourcefiles:需要编译的源文件列表
classes:作为注解使用的类文件类表(以.class为后缀)
@argfiles:一个或者多个文件列表,这些文件中指明了需要编译的Java源文件以及编译选项,-J选项不能够出现在这些文件中
参数说明:
javac的命令选项比较多,此处仅仅列举几个比较常用的命令选项:
-cp path | -classpath path:指定javac命令查找class文件(user
class files)、annotation处理器、java源文件的路径,指定后,这些路径会替换掉环境变量CLASSPATH中所指定的路径,如果CLASSPATH、-cp、-classpath均未被指定,那么javac会将当前路径添加到class文件的搜索路径,如果-sourcepath选项未指定,javac会将-cp或者-classpath或者CLASSPATH指定的路径作为源文件的搜索路径,同时,如果-processorpath选项未指定,则该路径还会被javac作为annotation处理器的搜索路径
-d directory:指定javac编译后的类文件的输出路径,该路径必须提前创建完成,javac不会创建该路径。如果被编译的类属于一个包,javac会根据该类的包名在directory目录中创建对应的文件夹,并将类放于正确的和包对应的目录下。如果-d未被指定,javac会将所有类文件编译到同一个目录之中
-deprecation | -Xlint:deprecation
:描述成员或者类的deprecation信息
-encoding encoding:指定java源文件的编码名称,比如EUC-JP、UTF-8,如果-encoding未指定,则使用平台的默认编码
-g:默认情况下javac会向编译后的class文件会注入用于调试的行号以及源文件信息,指定-g后,会添加更多的调试信息,比如局部变量信息
-g:none:不产生任何调试信息

-g:{keyword
list}:指定生成的调试信息类型,类型之间以逗号隔开,具体如下:
source:生成源文件调试信息

lines:生成行号相关的调试信息

vars:生成局部变量相关的调试信息
-help:生成帮助信息
-J<option>:为javac所调用的java launcher程序指定运行时参数,比如-J-Xms48m设置启动内存为48M
-nowarn:禁用warning消息
-source release:指定文件的版本号,可选的有{1.3、1.4、1.5、5、1.6、6、1.7、7}
-sourcepath sourcepath:指定java源文件的搜索路径,路径之间以分好间隔,可以是文件夹、JAR文件、ZIP文件。
-verbose:显示编译时的详细信息,包括源文件搜索路径、类文件搜索路径、类的加载信息、源文件的编译信息等
-version:打印版本信息
-Werror:如果发生warning,则停止编译
-X:打印非标准选项的信息
-Xlint | -Xlint:all:允许打印所有的提示信息
-Xlint:none:禁用所有warning消息,与-nowarn类似
-Xlint:name:启用某个warning消息
-Xlint:-name:禁用某个warning消息
-Xmaxerrs
number:设置最多显示的error个数

-Xmaxwarns number:设置最多显示的warning个数

-Xstdout
filename:将编译的message存放到文件中,默认情况下,这些信息被放到System.err中,也即输出到控制台屏幕
-Xprefer:{newer,source}:当一个类型的类文件和源文件都找到了,此参数指定javac在编译的时候,所读取的文件,-Xprefer:newer表示读取类文件和源文件中较新的文件,这也是默认的读取方式,-Xprefer:source表示读取源文件。
-Xpkginfo:{always,legacy,nonempty}:指定package-info文件的处理方式(Specify
handling of package-info files)
-Xprint:以文本的形式打印特定类型的调试信息。

另:javac还提供跨版本的编译特性,可以将源文件编译为指定版本的JVM所支持的class文件格式,此处就不作过多的描述了

能够被-Xlint开启(-Xlint:name)和关闭(-Xlint:-name)的警告信息有:
cast

classfile

deprecation
dep-ann
divzero
empty:空语句
fallthrough

finally:非正确处理的finally语句

options
overrides
path:提示非法的路径或者不存在的路径警告
processing
serial:序列化类未定义serialVersionUID 警告
static
try
unchecked
varargs
示例:

javac -source 1.6 -target 1.6 -bootclasspath C:\jdk1.6.0\lib\rt.jar
^
-extdirs "" test.java
参考链接:

更多关于javac的详细信息(Windows版)见:docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html

java/javaw Java执行命令

描述:
java/javaw(Launches a Java application) 启动一个java应用程序,java会在the
bootstrap class path, the installed extensions, and the user class path中搜索启动类以及其它需要使用到的相关类;javaw和java类似,只是javaw是以message box的形式提示错误消息。
格式:
java [ options ] class [ arguments ]
java
[ options ] -jar file.jar [ arguments ]
javaw [ options ] class [ arguments ]
javaw [ options ] -jar file.jar [ arguments ]
参数说明:
-client:以client(C1)模式启动JVM,64-bit的JDK会忽略此选项,使用server(C2)模式的JVM
-server:以server(C2)模式启动JVM,64-bit只支持server模式
-agentlib:libname[=options]:详见docs.oracle.com/javase/7/docs/platform/jvmti/jvmti.html#starting

-agentpath:pathname[=options]

-classpath
classpath | -cp classpath :设置类的搜索路径,路径之间用分好隔开,路径可以是文件夹、JAR文件、ZIP文件,如果-classpath、-cp、CLASSPATH均未指定,则使用当前路径作为类搜索路径
-Dproperty=value:设置系统属性,如果属性中有空格,则将他们放到双引号内
-disableassertions[:package
name"..." | :class name ]
-da[:package
name"..." | :class name ]
-enablesystemassertions
| -esa:启用系统断言
-disablesystemassertions
| -dsa:禁用系统断言
-help or -?
-jar:运行带有main入口的jar包,设置此选项后,jar文件就被当成是类文件的搜索路径,其它关于类文件的搜索路径都被忽略
-javaagent:jarpath[=options]
-jre-restrict-search: 在版本搜索中包括用户专用
JRE
-no-jre-restrict-search:在版本搜索中排除用户专用
JRE
-version
| -showversion:输出产品版本并退出
-version:release:需要指定的版本才能运行
-splash:imagepath:使用指定的图像显示启动屏幕
-verbose:[class | gc |jni]:启用详细输出

class:打印关于加载类的信息
gc:打印GC信息

jni:打印JNI信息

非标准选项:
-X:打印所有非标准选项信息
-Xint:只有在解释模式(interpreted-only
mode)下才有效,开启此选项后,所有字节码均已解释模式执行,不会被编译成本地码
-Xbatch:禁用后台模式的编译,默认情况下,JVM会在后台执行编译任务,但是编译任务未执行完成之前,仍然按照解释模式执行。-Xbatch禁用后台编译模式。
-Xbootclasspath:bootclasspath:设置搜索路径以引导类和资源,以替换包含在Java
platform JDK中的启动类文件,路径之间以分好隔开,可以使文件夹、JAR文件、ZIP文件
-Xbootclasspath/a:path:在默认的bootstrap
class path上追加类文件路径
-Xbootclasspath/p:path:将类文件路径添加到默认的bootstrap
class path之前
上述三个选项均可能覆盖tr.jar文件,因此带有上述选项的应用程序最好不要发布,否则会影响到 Java
Runtime Environment binary code license.
-Xcheck:jni:对
JNI 函数执行其他检查
-Xfuture:对class文件启用最严格的检查
-Xnoclassgc:禁用类垃圾收集,对已经加载的类所占用的空间不进行回收,有可能会导致OutOfMemoryError错误
-Xincgc:启用增量垃圾收集,默认关闭
-Xloggc:file:指定GC日志的输出文件
-Xmnsize
or -XX:NewSize:设置新生代的大小
-Xms<n>:设置堆内存的初始值,如 -Xms6291456、 -Xms6144k
、 -Xms6m
-Xmx<n>:设置堆内存的最大值,如-Xmx83886080、-Xmx81920k、-Xmx80m
-Xss<n>: 设置 Java 线程堆栈大小
-Xprof:输出
cpu 配置文件数据到标准输出
-Xrs:减少
Java/VM 对操作系统信号的使用
-XX:+|-DisableAttachMechanism:控制jmap、jconsole等命令行工具是否能够attach到Java
VM,默认关闭,表示运行attach
-XX:PredictedClassLoadCount=n:开启UnlockExperimentalVMOptions参数时有效,表示再有大量的类需要加载(比如频繁使用class.forName())的时候,指定此参数,表示在-verbose:clsas中显示加载类的数量
-XX:+PrintCompilation:打印方法的即时编译信息
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps:打印带有时间戳的GC日志信息
示例:
java -d64 -server -XX:+AggressiveOpts -XX:+UseLargePages -Xmn10g -Xms26g -Xmx26g :优化高吞吐量
java
-d64 -XX:+UseG1GC -Xms26g Xmx26g -XX:MaxGCPauseMillis=500 -XX:+PrintGCTimeStamps :优化低响应时间
参考链接:

更多关于java工具细信息(Windows版)见:docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html

javap java类文件反编译工具

描述:
javap(The Java Class File Disassembler) 用于将二进制字节码反编译为用户指定的格式
格式:
javap <options> <classes>
参数说明:
<classes>
需要被反编译的class文件列表,以空格隔开,可以带通过路径指定class文件(例如,C:\src\DocFooter.class),也可通过URL(如: file:///C:/src/DocFooter.class)
<options>
-help | --help | -? :打印javap的帮助信息

-l:显示行号用和局部变量表

-public:只显示访问权限为public的类和成员

-protected:仅显示访问权限为protected和public的类和成员

-package:进显示访问权限为package、protected、public的类和成员,此为默认值

-private | -p:显示所有类和成员

-J<flag>:将flag传递到运行时系统(如:javap -J-version,javap -J-Djava.security.manager -J-Djava.security.policy=MyPolicy
MyClassName)

-s:显示签名信息

-sysinfo:显示系统信息(path, size, date, MD5 hash)
-constants:显示static
final类型的常量信息

-c:以助记符的形式显示字节码信息

-verbose:显示方法的栈大小、局部变量数目、参数个数信息

-classpath path:指定javap搜索类的路径,用以覆盖CLASSPATH

-bootclasspath path:设置加载bootstrap classes的路径

-extdirs dirs:覆盖java.ext.dirs
示例:
javap -package -s -sysinfo -constants test.class
参考链接:

更改与javap相关的信息(Windows版)见:docs.oracle.com/javase/7/docs/technotes/tools/windows/javap.html

jps 进程状况工具

描述:
jps 命令和Linux下面的ps命令类似,用于查看java进程的运行状态。
格式:
jps [-q] [-mlvV] [<hostid>]

jstat 虚拟机统计信息监视工具:
描述:
jstat
JVM Statistics Monitoring Tool,用于检测虚拟机各种运行状态的命令行工具。
格式:
jstat -<option> [-t] [-h<lines>] -J<flag> <vmid>
[<interval> [<count>]]
参数说明:
interval 表示查询的间隔
count 表示查询的次数
示例:
jstat -gc -J-Xms48m -t -h 2 21600 1000 10 : 检测Java进程21600的垃圾回收状态,将jstat运行的JVM的最小堆大小设置为48M,在显示的结果中添加时间戳一列,每隔2行显示一次列名,每隔1000毫秒收集以及GC信息,总共收集10次即可
选项:
<option>
-class:监视类装载、卸载数量、总空间以及类卸载所耗费的时间
-gc:监视java堆状况,包括Eden区、两个Survivor区、老年代、永久代的容量、已用空间、GC时间合计等信息
-gccapacity:监视内容与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大、最小空间
-gcutil:监视内容与-gc基本相同,但输出主要关注已经使用空间占总空间的百分比
-gccause:与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因
-gcnew:监视新生代GC的状况
-gcnewcapacity:监视内容与-gcnew基本相同,但是输出关注使用到的最大最小空间
-gcold:监视老年代的GC状况
-gcoldcapacity:监视内容与-gcold基本相同,但是输出关注使用到的最大最小空间
-gcpermcapacity:输出永久代使用到的最大最小空间
-compiler:输出JIT编译器编译过的方法、耗时等信息
-printcompilation:输出以及被JIT编译的方法

-t:在输出结果中显示时间戳,时间戳表示JVM虚拟机已经运行的时间段
-h:每间隔多少行显示一次列名,默认值为0,表示仅仅显示一次列名
-J:设置jstat运行时的JVM参数,例如:-J-Xms48m
参考链接:
各个选项输出结果的详细信息见:docs.oracle.com/javase/7/docs/technotes/tools/share/jstat.html

jinfo JVM配置信息工具

描述:
info (Configuration Info for Java) 实时的查看和调整JVM虚拟机的各项参数
格式:

jinfo [option] <pid>:连接到一个Java进程,查看JVM配置信息
jinfo [option] <executable <core>:连接到一个core文件,查看产生该core文件的JVM配置信息
jinfo [option] [server_id@]<remote server IP or hostname>:连接到一个远程主机,查看JVM的配置信息

参数说明:
[option]
-flag <name>:打印指定参数的值
-flag [+|-]<name>:开启或者关闭指定的参数
-flag <name>=<value>:设置指定参数的为给定的值
-flags:打印在启动Java程序的时候,为JVM指定的参数
-sysprops:打印Java的系统属性值
<no option>:不加任何参数,等同于-flags + -sysprops
-h | -help:打印帮助信息
示例:
jinfo
-flags 10120:打印进程号为10120的Java进行在启动时所指定的JVM参数信息
参考链接:
jinfo详细信息见:docs.oracle.com/javase/7/docs/technotes/tools/share/jinfo.html

jhat 虚拟机Dump文件分析工具

描述:
jhat (JVM Heap Analysis Tool)可以分析有jmap工具生成的虚拟机内存转储快照文件,jhat会启动一个内置的HTTP/HTML服务器,可以再浏览器中查看生成dump文件的分析结果。
格式:
jhat
[ options ] <heap-dump-file>
参数说明:
[options]
-J<flag>:设置jhat运行时的JVM参数,比如:-J-mx512m
表示将最大堆的值设置为512MB

-stack false/true: 关闭追踪对象空间分配调用的堆栈,默认值为true

-refs false/ture: 关闭追踪对象的引用信息,默认值为true

-port <port>: 设置HTTP服务器的端口号

-exclude <file>:设置某个文件中的成员对象不能够被OQL查询语句查询到,其中OQL(Object Query Language)类似于SQL语句,可以对Dump文件中的信息进行筛选

-baseline <file>: Specify a baseline object dump. Objects in

both heap dumps with the same ID and same class will

be marked as not being "new".

-debug <int>: 设置调试级别

0: No debug output

1: Debug hprof file parsing

2: Debug hprof file parsing, no server

-version:打印版本号

-h|-help:显示帮助信息

<heap-dump-file>:需要分析的转储文件名

示例:
jmap -dump:live,format=b,file=a.map 10120:为10120进程生成Dump文件a.map
jaht -port 20000 a.map:查看堆转储文件a.map,指定HTTP服务器端口号为20000
参考链接:

jhat详细信息参考:docs.oracle.com/javase/7/docs/technotes/tools/share/jhat.html

jmap 生成Java内存转储文件

描述:
jmap (Memroy Map for Java):用于生成堆转储快照,称之为heapdump或者dump文件
格式:
jmap
[ option ] pid:连接到本地的Java进程,生成Dump文件
jmap
[ option ] executable core:连接到一个core文件,生成Dump文件
jmap
[ option ] [server-id@]remote-hostname-or-IP:连接到远程主机生成Dump文件
参数说明:

<no option>:不添加参数,表示打印动态连接库信息:动态链接库的其实加载地址、映射区域大小、动态链接库的完整路径

-dump:[live,]format=b,file=<filename>:使用hprof二进制形式将堆快照输出到filename文件中,如果指定live,则只输出活动对象到文件中,可以通过jhat工具来查看转储文件中的内容

-finalizerinfo:打印那些正在等待回收的对象的信息
-heap:打印Heap的改统计信息,如GC使用的算法、Heap的配置信息以及分带状况等

-histo[:live]:打印每个堆的直方图信息,每个类的实例数目、内存的字节数、类名的全名限定符都会被打印,对于VM内部类名称,会在名称添加"*"前缀,如果加上live子参数的话,则仅仅统计活动对象的直方图信息

-permstat:打印Java堆中永生带中的类加载器统计信息,打印这些类加载器的名称、存活情况、地址、父类加载器、加载的类的数量,同时永久代中的字符串的数量和占用的空间也会被打印

-F:当虚拟机进程对-dump选项没有响应的时候,可以使用此选项强制生成dump快照

-h|-help:显示帮助信息

-J<flag>:设置jmap运行时的JVM参数

-l:除堆栈外,显示关于锁的附件信息

-m:以混合模式打印堆栈信息,也即,当调用到本地方法的时候,显示C/C++的堆栈信

-h|-help:显示帮助信息

示例:

jmap -dump:live,format=b,file=a.map 10120:为10120进程生成Dump文件a.map
参考链接:

更多jmap的信息见:docs.oracle.com/javase/7/docs/technotes/tools/share/jmap.html

jstack Stack追踪工具

描述:
jstack (Stack Trace for Java) 生成虚拟机当前时刻的线程快照,threaddump、javacore。
格式:
jstack
[ option ] pid:连接到本地Java进程,查看其堆栈信息

jstack [ option ] executable core:连接到core文件,查看堆栈信息

jstack [ option ] [server-id@]remote-hostname-or-IP:连接到远程服务器,查看堆栈信息
参数说明:
-F:当-l选项不被响应的时候,强制输出堆栈信息

示例:
jstack -l 10120:查看Java进程10120的各个线程的堆栈信息,并查看各个线程的锁信息
参考链接:

更多关于jstack的信息见:docs.oracle.com/javase/7/docs/technotes/tools/share/jstack.html

jdb Java程序调试命令

描述:
jdb
(Debug for Java) Java程序的命令行调试工具

格式:
jdb
[ options ] [ class ] [ arguments ]

参数说明:
options:jdb的调试选项
class:需要调试的类名
arguments:需要传递给main函数的参数列表
[options]

-help:显示帮助信息

-sourcepath <dir1:dir2:...>:在指定的路径中搜索源文件,默认在当前路径(.)中搜索

-attach <address>:attach到已经运行起来的虚拟机

-listen <address>:监听指定地址的JVM运行情况

-listenany:监听任何可用地址的JVM运行情况

-launch:立即启动VM,而不是等待run命令后才启动VM

-listconnectors:列出VM中可用的链接器

-connect<connector-name>:<name1>=<value1>,...:使用所列参数值通过指定的连接器连接到目标 VM

-dbgtrace [flags]:输出jdb的调试信息

-tclient:以Client模式运行Java HotSpot

-tserver:以Server模式运行Java HotSpot

-Joption:指定JVM的运行时参数信息,比如:-J-Xms48m,该选项会被传递给run命令

-v -verbose[:class|gc|jni]:启用详细模式

-D<name>=<value>:设置系统属性

-classpath <directories separated by":">:设置类的搜索路径,路径直接用冒号隔开

-X<option>:设置JVM的费标准选项
常用命令:
run、cont、print、dump、threads、thread、where、stop、clear、step、next、catch、ignore等
参考链接:

关于jdb的更多信息(Windows版)见:docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html

jconsole Java进程运行时图形化检测工具

描述:
jconsole (Java Monitoring and Management Console) Java进程运行时信息的图形化检测工具
格式:
jconsole
[ options ] [ connection ... ]
jconsole [ -interval=n ] [ -notile ] [ -pluginpath <path> ] [ -version ] [ connection ... ]
参数说明:
-interval:将更新间隔设置为 n 秒 (默认值为 4 秒)
-notile:
初始不平铺窗口 (对于两个或多个连接)
-pluginpath:指定
jconsole 查找插件的路径
-version:输出程序版本
connection=pid
|| host:port || JMX URL (service:jmx:<协议>://...)

pid:目标进程的进程 ID

host:远程主机名或 IP 地址

port:远程连接的端口号
-J<flag>: 指定运行
jconsole 的 Java 虚拟机的输入参数
参考链接:

关于jconsole更详细的说明见:docs.oracle.com/javase/7/docs/technotes/tools/share/jconsole.html

jvisualvm 图形化的JVM检测工具

描述:
jvisualvm(Visually monitors, troubleshoots, and profiles Java applications) 图形化的JVM性能检测工具。
插件安装:
安装插件后,即可开启图形检测界面



参考链接:

关于jvisualvm的更改信息见:docs.oracle.com/javase/8/docs/technotes/tools/windows/jvisualvm.html#CBBEGDEJ

MAT
Eclipse内存分析工具

描述:
mat (Memory Analyzer tool)
Eclipse提供的专业的内存转储文件分析工具,帮助分析内存使用情况以及内存泄露的问题
安装:
离线安装:下载MemoryAnalyzer-1.3.1.201401071412.zip,将其解压到eclipse/dropins目录下即可:



在线安装:
打开eclipse->help->Install
New Software
输入更新地址:download.eclipse.org/mat/1.3.1/update-site/



运行:
打开eclipse->Windows->Open Perspective->Ohter...



选择Memory Analysis视图









参考链接:

mat下载地址:www.eclipse.org/mat/downloads.php



mat在线安装地址:download.eclipse.org/mat/1.3/update-site/

download.eclipse.org/mat/1.3.1/update-site/

其它工具

除了上面介绍的JVM性能分析工具之外,还有其它的工具:

YourKit
YourKit Java Profiler是业界领先的Java剖析工具。CPU和内存的剖析历来是很困难的,YourKit创造出了革命性的剖析工具,应用在研发和生产阶段,为专业的Java开发者带来了无比的好处。本文主要对性能分析软件yourkit的入门介绍。
JProfiler
JProfiler是一款Java的性能监控工具。可以查看当前应用的对象、对象引用、内存、CPU使用情况、线程、线程运行情况(阻塞、等待等),同时可以查找应用内存使用得热点,这里提供有几篇文章供参考:获取、介绍,简单入门,使用JProfiler解决实际问题。这几篇文章基本介绍了常见东西了,下面说点心得。
JProbe

在Java的广泛应用中,虽然优点一直在促进J2EE的空前发展,但也经常出现一些麻烦,那就是人们经常对J2EE应用的性能感到失望。因此,我们需要一些工具和调查策略来帮助J2EE开发团队解决这些性能问题。这就是Quest JProbe
Profiler和Jprobe Memory Debugger所要解决的问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: