Является ли процесс JPS процессом JVM? - PullRequest
0 голосов
/ 14 апреля 2019

В 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, а не программа с байт-кодом JVM, скомпилированная из программы Java:

$ 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

$ jps -v
16462 Jps -Dapplication.home=/usr/lib/jvm/java-11-openjdk-amd64 -Xms8m -Djdk.module.main=jdk.jcmd

Ответы [ 2 ]

4 голосов
/ 14 апреля 2019

Что означает «инструментальная виртуальная машина Java»?

Инструментальная JVM - это JVM с инструментами.

Однако это глупое определение, и я не смог найти четкого объяснения того, что это на самом деле означает.

Фактически, это потенциально относится (по крайней мере) к любой JVM HotSpot начиная с Java 5.0. Текущая реализация jps выглядит для инструментальных JVM следующим образом:

  • Если вы укажете hostid, jps попытается связаться со службой RMI (jstatd) на хосте, чтобы узнать о процессах Java.

  • Если вы не укажете hostid, jps найдет процессы Java, найдя каталоги /tmp/hsperfdata_<username>, доступные для чтения текущему пользователю; см. Как jps, jinfo, jstat, jmap и jstack получают информацию о локальных процессах java? . JVM создаст один из этих каталогов , если только вы не используете , запустите JVM с -XX:-UsePerfData или -XX:-PerfDisableSharedMem. (Спасибо @apangin за эту информацию.)

Является ли процесс jps процессом JVM по определению?

Текущая реализация jps *1040* - это класс Java, который выполняется в JVM, созданной универсальным средством запуска (исполняемый файл jps). Однако не существует «определения», которое гласит, что должен быть реализован таким образом.

Обратите внимание, что, поскольку jps без каких-либо аргументов окажется (по крайней мере, в моей системе), это означает, что в текущей реализации используется инструментированная JVM.

2 голосов
/ 22 апреля 2019

Большинство команд, которые поставляются с JVM, на самом деле реализованы с использованием Java.В этом случае jps запускает JVM для запуска класса sun.tools.jps.Jps

http://www.docjar.com/html/api/sun/tools/jps/Jps.java.html

Аналогично javac фактически запускается com.sun.tools.javac.Main

https://docs.oracle.com/javase/9/docs/api/com/sun/tools/javac/Main.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...