jps进程是JVM进程吗?

jps进程是JVM进程吗?

在 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

谢谢。

答案1

“仪器化 Java 虚拟机”是什么意思?

在 Linux 上,“仪表化 Java 虚拟机”是使用该-XX:+UsePerfData选项启动的虚拟机——默认情况下该选项处于启用状态。

这会将性能和其他信息存储到/tmp/hsperfdata_$USER/$PID文件中,该工具将读取该jps(1)文件。

如果您想启动未检测的 JVM,请将其作为java -XX:-UsePerfData YourClass.这将阻止它写入 hsperfdata 并出现在jps的输出中。

根据定义,jps 进程是 JVM 进程吗?

是的

jps 是一个 ELF 文件,而不是由 Java 程序编译而成的 JVM 字节码程序:

jps只是一个发射器,这将启动 JVM 并加载sun.tools.jps.Jpsjava类就从tools.jar里面进去了。以这种方式启动的 JVM 将编写自己的 hsperfdata 文件,这就是该类Jps出现在其自己的输出中的原因。您可以通过将与上面相同的选项传递给 JVM 来关闭它-J转变:

$ jps
12583 Jps
$ jps -J-XX:-UsePerfData
$

答案2

是的,jps是一个Java应用程序。

Oracle 博客:

那就是

jps

命令就派上用场了。它将列出为您正在使用的 JDK 安装目录启动的所有虚拟机的进程 ID。您的输出,特别是进程 ID,可能会有所不同:

> jps
5156 Jps
4276 MyFrame

自从

jps

命令本身是一个Java程序,它也显示在列表中。

相关内容