Java
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
謝謝。
“儀表化的 Java 虛擬機”是什麼意思?
在 Linux 上,“儀表化 Java 虛擬機”是使用選項啟動的 vm——
-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.Jps
從中載入 java 類tools.jar
。以這種方式啟動的 JVM 將編寫自己的 hsperfdata 文件,這就是Jps
該類出現在自己的輸出中的原因。您可以通過開關將與上述相同的選項傳遞給 JVM 來關閉它-J
:$ jps 12583 Jps $ jps -J-XX:-UsePerfData $