Определите текущую JVM с помощью Java или JVMTI - PullRequest
2 голосов
/ 07 апреля 2011

Я хотел бы определить текущую JVM, которая работает.В лучшем случае с функцией, описанной в документации JVMTI , но я ничего не могу найти.


Что я имел в виду, примерно так: VirtualMachine.list() поставляет:

[sun.tools.attach.WindowsAttachProvider@46ae506e: 2440 de.fu.profiler.view.MainFrame...

Но он отображает все JVM, а не текущую запущенную.

Ответы [ 5 ]

3 голосов
/ 07 апреля 2011

Вы можете получить уникальное имя из RuntimeMXBean .на большинстве платформ это включает processid текущего процесса.

3 голосов
/ 07 апреля 2011

Используйте системные свойства Java, например

java.runtime.name=Java(TM) 2 Runtime Environment, Standard Edition
java.runtime.version=1.5.0_01-b08
java.specification.name=Java Platform API Specification
java.specification.vendor=Sun Microsystems Inc.
java.specification.version=1.5
java.vendor=Sun Microsystems Inc.
java.vendor.url=http://java.sun.com/
java.vendor.url.bug=http://java.sun.com/cgi-bin/bugreport.cgi
java.version=1.5.0_01
java.vm.info=mixed mode, sharing
java.vm.name=Java HotSpot(TM) Client VM
java.vm.specification.name=Java Virtual Machine Specification
java.vm.specification.vendor=Sun Microsystems Inc.
java.vm.specification.version=1.0
java.vm.vendor=Sun Microsystems Inc.
java.vm.version=1.5.0_01-b08

Используйте java.lang.System.getProperties() или getProperty(String name)

0 голосов
/ 07 апреля 2011

jps (инструмент командной строки в комплекте с JDK) выведет список запущенных в данный момент процессов Java.

Вы можете использовать JMX для поиска и подключения к различным запущенным процессам Java.

http://download.oracle.com/javase/1.5.0/docs/guide/management/agent.html

Вам потребуется включить мониторинг.

Определение текущего PID сильно зависит от операционной системы.Вот сообщение в блоге с некоторыми дополнительными предложениями:

http://blog.igorminar.com/2007/03/how-java-application-can-discover-its.html

Вот ссылки с дополнительной информацией:

Как Java-программа может получить свою собственнуюидентификатор процесса? http://www.google.com/search?q=find+current+java+process+id

0 голосов
/ 07 апреля 2011

JVM не имеет ни одного идентифицирующего класса, который связан с его вызовом, по крайней мере, не тот, который вы можете легко запросить.

Если вы используете JVMTI, вы можете определить потоки, которые работаютв JVM, к которому вы подключились.Может быть один или несколько потоков, в зависимости от того, использует ли JVM графический интерфейс или (например) корпоративный контейнер.Для заданных потоков вы можете проверить стек и определить текущий вызываемый метод.Если вы выполняете итерацию по стеку, вы можете решить, является ли родительский класс частью JVM (например, java.lang. ) или классом приложения (например, com.fun. ).Это может позволить вам однозначно определить «цель» исследуемой JVM.

0 голосов
/ 07 апреля 2011

Будет System.getProperty("java.runtime.name") делать?

...