在 Ubuntu 上,man jps
说
jps - 列出目标系统上已检测的 Java 虚拟机 (JVM)。
“仪表化的 Java 虚拟机”是什么意思?
$ jps -v
29584 Jps -Dapplication.home=/usr/lib/jvm/java-11-openjdk-amd64 -Xms8m -Djdk.module.main=jdk.jcmd
根据定义,jps 进程是 JVM 进程吗?
jps 是一个 ELF 文件,而不是从 Java 程序编译的 JVM 字节码程序:
$ file /usr/lib/jvm/java-11-openjdk-amd64/bin/jps
/usr/lib/jvm/java-11-openjdk-amd64/bin/jps: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 3.2.0, BuildID[sha1]=3f48c70ab711b493ee793c92c19b3a884896bb4d, stripped
谢谢。
在 Linux 上,“仪表化 Java 虚拟机”是使用选项启动的 vm——
-XX:+UsePerfData
默认情况下是打开的。这将导致它存储性能和其他信息到一个
/tmp/hsperfdata_$USER/$PID
文件中,该文件将由该jps(1)
工具读取。如果您想启动一个未安装的 JVM,请将其作为
java -XX:-UsePerfData YourClass
. 这将阻止它写入 hsperfdata 并出现在jps
的输出中。是的
jps
只是一个启动器,它将启动一个 JVM 并sun.tools.jps.Jps
从中加载 java 类tools.jar
。以这种方式启动的 JVM 将编写自己的 hsperfdata 文件,这就是Jps
该类出现在自己的输出中的原因。您可以通过开关将与上述相同的选项传递给 JVM 来关闭它-J
:是的,
jps
是一个Java应用程序。来自Oracle 博客: