前言
jdk中包含了很多的工具程序,除了常用的java
用来运行java程序之外,还有其他的使用工具来收集java程序的信息。下面一起来看看吧。
更多信息请参考官方文档。
启动虚拟机
java
java是启动虚拟机的参数,它的参数值得研究和实践。
java命令用来启动java应用程序。它通过启动Java运行时环境(JRE)、加载指定的类并调用该类的main()
方法来实现这一点。该方法必须声明为公有和静态的,它不能返回任何值,并且必须接受String
数组作为参数。方法声明的形式如下:
public static void main(String[] args)
java命令可以用来启动一个JavaFX应用程序通过加载一个类,它有一个main()
方法或扩展javafx.application.Application
。在后一种情况下,发射器构造应用程序类的一个实例,调用它的init()
方法,然后调用start(javafx.stage.Stage)
方法。
默认情况下,不是java
命令选项的第一个参数是要调用的类的完全限定名。如果指定了-jar
选项,则其参数是包含应用程序的类和资源文件的JAR文件的名称。启动类必须在其源代码的Main-Class
清单头中指明。
JRE在三组位置搜索启动类(以及应用程序使用的其他类):引导类路径、安装的扩展和用户的类路径。
类文件名或JAR文件名后面的参数被传递给main()
方法。
javaw
命令与java
相同,除了javaw
没有相关的控制台窗口。当您不希望出现命令提示符窗口时,请使用javaw
。然而,如果启动失败,javaw
启动器将显示一个带有错误信息的对话框。
选项
java命令支持广泛的选项,可分为以下类别:
- 标准选项
- 非标准的选项
- 高级运行时选项
- 高级JIT编译器选项
- 高级可服务性选项
- 高级垃圾回收选项
标准选项保证得到Java虚拟机(JVM)的所有实现的支持。它们用于常见的操作,例如检查JRE版本、设置类路径、启用详细输出等等。
非标准选项是特定于Java HotSpot Virtual Machine的通用选项,因此它们不能保证得到所有JVM实现的支持,并且可能会发生变化。这些选项以-X
开头。
高级选项不建议随意使用。这些是用于调优Java HotSpot Virtual Machine操作的特定领域的开发人员选项,这些操作通常有特定的系统需求,可能需要对系统配置参数的特权访问。它们也不能保证得到所有JVM实现的支持,并且可能会发生变化。高级选项以-XX
开头。
为了跟踪在最新版本中已弃用或删除的选项,在文档的末尾有一个名为deprecated和removed options的部分。
布尔选项用于启用默认禁用的特性或禁用默认启用的特性。这些选项不需要参数。Boolean -XX
选项使用加号(-XX:+OptionName
)启用,使用减号(-XX:-OptionName
)禁用。
对于需要参数的选项,参数可以用空格、冒号(:
)或等号(=
)与选项名分开,或者参数可以直接跟在选项后面(每个选项的语法不同)。如果希望以字节为单位指定大小,则可以不使用后缀,或者使用后缀k或K表示千字节(KB), m或M表示兆字节(MB), g或G表示千兆字节(GB)。例如,要将大小设置为8gb,可以指定8g、8192m、8388608k或8589934592作为参数。如果希望指定百分比,请使用0到1之间的数字(例如,为25%指定0.25)。
以下是笔者用过的选项
标准选项
-verbose:class
显示关于每个装入类的信息。
-verbose:gc
显示关于每个垃圾收集(GC)事件的信息。
-verbose:jni
显示关于本机方法和其他Java本机接口(JNI)活动的使用信息。
高级可服务性选项
-XX:+PrintGC
支持在每个GC上打印消息。默认情况下,该选项是禁用的。
-XX:+PrintGCDetails
允许在每个GC上打印详细的消息。默认情况下,该选项是禁用的。
-XX:+PrintGCTimeStamps
允许在每个GC上打印时间戳。默认情况下,该选项是禁用的。
-XX:+PrintGCApplicationConcurrentTime
启用打印自上次暂停(例如GC暂停)以来经过了多少时间。默认情况下,该选项是禁用的。
-XX:+PrintGCApplicationStoppedTime
支持打印暂停(例如GC暂停)持续了多长时间。默认情况下,该选项是禁用的。
监视虚拟机
jps
列出目标系统上插装的Java虚拟机(jvm)。
//查看jvm虚拟机的进程信息
jps -l
jstat
监视Java虚拟机(JVM)统计信息。
jstat [ generalOption | outputOptions vmid [ interval[s|ms] [ count ] ]
故障诊断工具
jinfo 配置信息
连接一个正在运行的java进程pid
,打印给定Java进程、核心文件或远程调试服务器的Java配置信息。
jinfo [ option ] pid
jmap 内存映射
打印给定进程、核心文件或远程调试服务器的共享对象内存映射或堆内存细节。
jmap [ option ] pid
//查看堆信息
jmap -heap pid
//转储堆文件
jmap -dump:[live,]format=b,file=<filename> pid
//等待回收的对象数量
jmap -finalizerinfo pid
//打印堆的直方图
jmap -histo[:live] pid
jhat Java堆分析工具
解析java堆转储文件并启动web服务器。
jhat [ options ] <heap-dump-file>
jstack
打印Java进程、核心文件或远程调试服务器的Java线程堆栈跟踪。
jstack [ options ] pid
jstack -l pid
监视java程序
jvisualvm
可视化地监视、故障排除和配置Java应用程序。
jvisualvm <options>
idea有个插件
VisualVM Launcher
可以方便启动jvisualvm
。
jconsole
启动一个图形控制台,允许您监视和管理Java应用程序。
jconsole [ options ] [ connection ... ]