Spec-Zone.ru › OpenJDK 25

Класс VirtualMachine

java.lang.Object
com.sun.tools.attach.VirtualMachine
public abstract class VirtualMachine extends Object
Виртуальная машина Java.

VirtualMachine представляет виртуальную машину Java, к которой подключена эта виртуальная машина Java. Виртуальную машину Java, к которой выполняется подключение, иногда называют целевой виртуальной машиной или целевой VM. Приложение (обычно инструмент, например консоль управления или профилировщик) использует VirtualMachine для загрузки агента в целевую VM. Например, инструмент-профилировщик, написанный на языке Java, может подключиться к работающему приложению и загрузить в него свой агент для профилирования.

Экземпляр VirtualMachine получают вызовом метода attach с идентификатором целевой виртуальной машины. Идентификатор зависит от реализации, но обычно это идентификатор процесса (или pid) в средах, где каждая виртуальная машина Java работает в отдельном процессе операционной системы. В качестве альтернативы экземпляр VirtualMachine получают вызовом метода attach с объектом VirtualMachineDescriptor, полученным из списка дескрипторов виртуальных машин, возвращаемого методом list. После получения ссылки на виртуальную машину для загрузки агентов в целевую виртуальную машину используются методы loadAgent, loadAgentLibrary и loadAgentPath. Метод loadAgent используется для загрузки агентов, написанных на языке Java и развернутых в JAR file. (Подробное описание загрузки и запуска этих агентов см. в разделе java.lang.instrument). Методы loadAgentLibrary и loadAgentPath используются для загрузки агентов, размещенных в динамической библиотеке или статически связанных с VM и использующих интерфейс JVM Tools.

Помимо загрузки агентов, VirtualMachine предоставляет доступ на чтение к system properties в целевой VM. Это может быть полезно в некоторых средах, где такие свойства, как java.home, os.name или os.arch, используются для построения пути к агенту, который будет загружен в целевую VM.

В следующем примере показано использование VirtualMachine:


     // attach to target VM
     VirtualMachine vm = VirtualMachine.attach("2177");

     // start management agent
     Properties props = new Properties();
     props.put("com.sun.management.jmxremote.port", "5000");
     vm.startManagementAgent(props);

     // detach
     vm.detach();

В этом примере выполняется подключение к виртуальной машине Java, определяемой идентификатором процесса 2177. Затем в целевом процессе запускается агент управления JMX с переданными аргументами. Наконец, клиент отключается от целевой VM.

VirtualMachine можно безопасно использовать из нескольких потоков одновременно.

С версии:
1.6

Краткое описание конструкторов

VirtualMachine(AttachProvider provider, String id)
Модификатор Конструктор Описание
protected
Инициализирует новый экземпляр этого класса.

Краткое описание методов

Модификатор и тип Метод Описание
static VirtualMachine attach(VirtualMachineDescriptor vmd)
Подключается к виртуальной машине Java.
static VirtualMachine attach(String id)
Подключается к виртуальной машине Java.
abstract void detach()
Отключается от виртуальной машины.
boolean equals(Object ob)
Проверяет, равен ли этот объект VirtualMachine другому объекту.
abstract Properties getAgentProperties()
Возвращает текущие свойства агента в целевой виртуальной машине.
abstract Properties getSystemProperties()
Возвращает текущие системные свойства в целевой виртуальной машине.
int hashCode()
Возвращает хеш-код этого объекта VirtualMachine.
final String id()
Возвращает идентификатор этой виртуальной машины Java.
static List<VirtualMachineDescriptor> list()
Возвращает список виртуальных машин Java.
void loadAgent(String agent)
Загружает агент.
abstract void loadAgent(String agent, String options)
Загружает агент.
void loadAgentLibrary(String agentLibrary)
Загружает библиотеку агента.
abstract void loadAgentLibrary(String agentLibrary, String options)
Загружает библиотеку агента.
void loadAgentPath(String agentPath)
Загружает библиотеку нативного агента по полному пути.
abstract void loadAgentPath(String agentPath, String options)
Загружает библиотеку нативного агента по полному пути.
final AttachProvider provider()
Возвращает поставщика, создавшего эту виртуальную машину.
abstract String startLocalManagementAgent()
Запускает локальный агент управления JMX в целевой виртуальной машине.
abstract void startManagementAgent(Properties agentProperties)
Запускает агент управления JMX в целевой виртуальной машине.
String toString()
Возвращает строковое представление VirtualMachine.

Методы, объявленные в классе Object

clone, finalize, getClass, notify, notifyAll, wait, wait, wait

Подробное описание конструкторов

VirtualMachine

protected VirtualMachine(AttachProvider provider, String id)
Инициализирует новый экземпляр этого класса.
Параметры:
provider — поставщик подключения, создающий этот класс.
id — абстрактный идентификатор виртуальной машины Java.
Выбрасывает:
NullPointerException — если provider или id равно null.

Подробное описание методов

list

public static List<VirtualMachineDescriptor> list()
Возвращает список виртуальных машин Java.

Этот метод возвращает список элементов Java VirtualMachineDescriptor. Список представляет собой объединение списков дескрипторов виртуальных машин, полученных вызовом метода listVirtualMachines всех установленных attach providers. Если ни одному поставщику не известны виртуальные машины Java, возвращается пустой список.

Возвращает:
Список дескрипторов виртуальных машин.

attach

public static VirtualMachine attach(String id) throws AttachNotSupportedException, IOException
Подключается к виртуальной машине Java.

Этот метод получает список поставщиков подключения, вызывая метод AttachProvider.providers(). Затем он перебирает список и поочередно вызывает метод attachVirtualMachine каждого поставщика. Если поставщику удается подключиться, перебор завершается, и этот метод возвращает VirtualMachine, созданную успешно подключившимся поставщиком. Если метод attachVirtualMachine всех поставщиков выбрасывает AttachNotSupportedException, этот метод также выбрасывает AttachNotSupportedException. Это означает, что AttachNotSupportedException выбрасывается, если переданный этому методу идентификатор недействителен, соответствует несуществующей виртуальной машине Java или ни один из поставщиков не может к ней подключиться. Это исключение также выбрасывается, если AttachProvider.providers() возвращает пустой список.

Параметры:
id — абстрактный идентификатор виртуальной машины Java.
Возвращает:
Объект VirtualMachine, представляющий целевую виртуальную машину.
Выбрасывает:
AttachNotSupportedException — если метод attachVirtualmachine всех установленных поставщиков выбрасывает AttachNotSupportedException или если поставщики не установлены.
IOException — если происходит ошибка ввода-вывода
NullPointerException — если id равно null.

attach

public static VirtualMachine attach(VirtualMachineDescriptor vmd) throws AttachNotSupportedException, IOException
Подключается к виртуальной машине Java.

Сначала этот метод вызывает метод provider() заданного дескриптора виртуальной машины, чтобы получить поставщика подключения. Затем он вызывает метод attachVirtualMachine этого поставщика для подключения к целевой виртуальной машине.

Параметры:
vmd — дескриптор виртуальной машины.
Возвращает:
Объект VirtualMachine, представляющий целевую виртуальную машину.
Выбрасывает:
AttachNotSupportedException — если метод attachVirtualmachine поставщика подключения выбрасывает AttachNotSupportedException.
IOException — если происходит ошибка ввода-вывода
NullPointerException — если vmd равно null.

detach

public abstract void detach() throws IOException
Отключается от виртуальной машины.

После отключения от виртуальной машины любая последующая попытка выполнить операции с этой виртуальной машиной приведет к выбрасыванию IOException. Если во время вызова этого метода выполняется операция (например, loadAgent), ее поведение зависит от реализации. Иными словами, реализация определяет, завершится ли операция или выбросит IOException.

Если подключение к виртуальной машине уже разорвано, вызов этого метода не оказывает никакого действия.

Выбрасывает:
IOException — если происходит ошибка ввода-вывода

provider

public final AttachProvider provider()
Возвращает поставщика, создавшего эту виртуальную машину.
Возвращает:
Поставщика, создавшего эту виртуальную машину.

id

public final String id()
Возвращает идентификатор этой виртуальной машины Java.
Возвращает:
Идентификатор этой виртуальной машины Java.

loadAgentLibrary

public abstract void loadAgentLibrary(String agentLibrary, String options) throws AgentLoadException, AgentInitializationException, IOException
Загружает библиотеку агента.

Клиент JVM TI называется агентом. Он разрабатывается на языке программирования низкого уровня. Развертывание агента JVM TI зависит от платформы, но обычно он представляет собой эквивалент динамической библиотеки для данной платформы. В качестве альтернативы агент может быть статически связан с виртуальной машиной. Этот метод загружает заданную библиотеку агента в целевую виртуальную машину (если она еще не загружена и не связана с виртуальной машиной статически). Затем он вызывает в целевой виртуальной машине функцию Agent_OnAttach или, для статически связанного агента с именем «L», функцию Agent_OnAttach_L, как указано в спецификации интерфейса JVM Tools. Обратите внимание, что функция Agent_OnAttach[_L] вызывается, даже если библиотека агента была загружена до вызова этого метода.

В качестве библиотеки агента указывается ее имя. Оно интерпретируется в целевой виртуальной машине способом, зависящим от реализации. Обычно реализация преобразует имя библиотеки в имя файла, специфичное для операционной системы. Например, в UNIX-системах имя L может преобразовываться в libL.so, а поиск выполняться по пути, заданному переменной среды LD_LIBRARY_PATH. Если агент с именем «L» статически связан с виртуальной машиной, она должна экспортировать функцию с именем Agent_OnAttach_L.

Если функция Agent_OnAttach[_L] в библиотеке агента возвращает ошибку, выбрасывается AgentInitializationException. Возвращаемое значение Agent_OnAttach[_L] можно получить, вызвав метод returnValue у исключения.

Параметры:
agentLibrary — имя библиотеки агента.
options — параметры, передаваемые функции Agent_OnAttach[_L] (может быть null).
Выбрасывает:
AgentLoadException — если библиотека агента не существует, не связана с виртуальной машиной статически или не может быть загружена по другой причине.
AgentInitializationException — если функция Agent_OnAttach[_L] возвращает ошибку.
IOException — если происходит ошибка ввода-вывода
NullPointerException — если agentLibrary равно null.
См. также:
  • AgentInitializationException.returnValue()

loadAgentLibrary

public void loadAgentLibrary(String agentLibrary) throws AgentLoadException, AgentInitializationException, IOException
Загружает библиотеку агента.

Этот вспомогательный метод работает так, как если бы был вызван:

loadAgentLibrary(agentLibrary, null);
Параметры:
agentLibrary — имя библиотеки агента.
Выбрасывает:
AgentLoadException — если библиотека агента не существует, не связана с виртуальной машиной статически или не может быть загружена по другой причине.
AgentInitializationException — если функция Agent_OnAttach[_L] возвращает ошибку.
IOException — если происходит ошибка ввода-вывода
NullPointerException — если agentLibrary равно null.

loadAgentPath

public abstract void loadAgentPath(String agentPath, String options) throws AgentLoadException, AgentInitializationException, IOException
Загружает библиотеку нативного агента по полному пути.

Клиент JVM TI называется агентом. Он разрабатывается на языке программирования низкого уровня. Развертывание агента JVM TI зависит от платформы, но обычно он представляет собой эквивалент динамической библиотеки для данной платформы. В качестве альтернативы нативная библиотека, заданная параметром agentPath, может быть статически связана с виртуальной машиной. Преобразование параметра agentPath в имя статически связанной библиотеки выполняется в виртуальной машине способом, зависящим от платформы. Например, в UNIX параметр agentPath со значением /a/b/libL.so задает библиотеку «L». Дополнительные сведения см. в спецификации JVM TI. Этот метод загружает заданную библиотеку агента в целевую виртуальную машину (если она еще не загружена и не связана с виртуальной машиной статически). Затем он вызывает в целевой виртуальной машине функцию Agent_OnAttach или, для статически связанного агента с именем «L», функцию Agent_OnAttach_L, как указано в спецификации интерфейса JVM Tools. Обратите внимание, что функция Agent_OnAttach[_L] вызывается, даже если библиотека агента была загружена до вызова этого метода.

В качестве библиотеки агента указывается абсолютный путь, по которому ее следует загрузить. В отличие от loadAgentLibrary, имя библиотеки не преобразуется в целевой виртуальной машине.

Если функция Agent_OnAttach[_L] в библиотеке агента возвращает ошибку, выбрасывается AgentInitializationException. Возвращаемое значение Agent_OnAttach[_L] можно получить, вызвав метод returnValue у исключения.

Параметры:
agentPath — полный путь к библиотеке агента.
options — параметры, передаваемые функции Agent_OnAttach[_L] (может быть null).
Выбрасывает:
AgentLoadException — если библиотека агента не существует, не связана с виртуальной машиной статически или не может быть загружена по другой причине.
AgentInitializationException — если функция Agent_OnAttach[_L] возвращает ошибку.
IOException — если происходит ошибка ввода-вывода
NullPointerException — если agentPath равно null.
См. также:
  • AgentInitializationException.returnValue()

loadAgentPath

public void loadAgentPath(String agentPath) throws AgentLoadException, AgentInitializationException, IOException
Загружает библиотеку нативного агента по полному пути.

Этот вспомогательный метод работает так, как если бы был вызван:

loadAgentPath(agentLibrary, null);
Параметры:
agentPath — полный путь к библиотеке агента.
Выбрасывает:
AgentLoadException — если библиотека агента не существует, не связана с виртуальной машиной статически или не может быть загружена по другой причине.
AgentInitializationException — если функция Agent_OnAttach[_L] возвращает ошибку.
IOException — если происходит ошибка ввода-вывода
NullPointerException — если agentPath равно null.

loadAgent

public abstract void loadAgent(String agent, String options) throws AgentLoadException, AgentInitializationException, IOException
Загружает агента.

В качестве агента этому методу передается имя пути к JAR-файлу в файловой системе целевой виртуальной машины. Этот путь передается целевой виртуальной машине, где он интерпретируется. Целевая виртуальная машина пытается запустить агента в соответствии со спецификацией java.lang.instrument. Иными словами, указанный JAR-файл добавляется в системный путь классов целевой виртуальной машины, а метод agentmain класса агента, заданный атрибутом Agent-Class в манифесте JAR-файла, вызывается. Метод завершается после завершения метода agentmain.

Параметры:
agent — путь к JAR-файлу, содержащему агента.
options — параметры, передаваемые методу agentmain агента (может быть null).
Выбрасывает:
AgentLoadException — если агент не существует или не может быть запущен способом, указанным в спецификации java.lang.instrument.
AgentInitializationException — если метод agentmain выбрасывает исключение
IOException — если происходит ошибка ввода-вывода
NullPointerException — если agent равно null.

loadAgent

public void loadAgent(String agent) throws AgentLoadException, AgentInitializationException, IOException
Загружает агента.

Этот вспомогательный метод работает так, как если бы был вызван:

loadAgent(agent, null);
Параметры:
agent — путь к JAR-файлу, содержащему агента.
Выбрасывает:
AgentLoadException — если агент не существует или не может быть запущен способом, указанным в спецификации java.lang.instrument.
AgentInitializationException — если метод agentmain выбрасывает исключение
IOException — если происходит ошибка ввода-вывода
NullPointerException — если agent равно null.

getSystemProperties

public abstract Properties getSystemProperties() throws IOException
Возвращает текущие системные свойства целевой виртуальной машины.

Этот метод возвращает системные свойства целевой виртуальной машины. Свойства, ключ или значение которых не является String, не включаются. Метод приблизительно эквивалентен вызову метода System.getProperties в целевой виртуальной машине, за исключением того, что свойства с ключом или значением, не являющимся String, не включаются.

Этот метод обычно используется для выбора агента, который будет загружен в целевую виртуальную машину с помощью loadAgent или loadAgentLibrary. Например, свойства java.home или user.dir можно использовать для формирования пути к библиотеке агента или JAR-файлу.

Возвращает:
Системные свойства
Выбрасывает:
AttachOperationFailedException — если целевая виртуальная машина не может завершить операцию подключения. Более подробное сообщение об ошибке будет указано в Throwable.getMessage().
IOException — если происходит ошибка ввода-вывода, например ошибка связи, которую невозможно распознать как ошибку, указывающую на сбой операции в целевой виртуальной машине.
См. также:
  • System.getProperties()
  • loadAgentLibrary(String, String)
  • loadAgent(String, String)

getAgentProperties

public abstract Properties getAgentProperties() throws IOException
Возвращает текущие свойства агента целевой виртуальной машины.

Целевая виртуальная машина может поддерживать список свойств для агентов. Способ их хранения, имена свойств и допустимые типы значений зависят от реализации. Свойства агента обычно используются для хранения конечных точек связи и других сведений о конфигурации агента. Например, агент отладчика может создать свойство агента для адреса транспортного механизма.

Этот метод возвращает свойства агента, ключ и значение которых являются String. Свойства, ключ или значение которых не является String, не включаются. Если целевая виртуальная машина не поддерживает свойства агента, возвращается пустой список свойств.

Возвращает:
Свойства агента
Выбрасывает:
AttachOperationFailedException — если целевая виртуальная машина не может завершить операцию подключения. Более подробное сообщение об ошибке будет указано в Throwable.getMessage().
IOException — если происходит ошибка ввода-вывода, например ошибка связи, которую невозможно распознать как ошибку, указывающую на сбой операции в целевой виртуальной машине.

startManagementAgent

public abstract void startManagementAgent(Properties agentProperties) throws IOException
Запускает агент управления JMX в целевой виртуальной машине.

Свойства конфигурации совпадают со свойствами, указываемыми в командной строке при запуске агента управления JMX. Как и в случае с командной строкой, необходимо указать как минимум свойство com.sun.management.jmxremote.port.

Дополнительные сведения см. в онлайн-документации «Мониторинг и управление с использованием технологии JMX».

Параметры:
agentProperties — объект Properties, содержащий свойства конфигурации агента.
Выбрасывает:
AttachOperationFailedException — если целевая виртуальная машина не может завершить операцию подключения. Более подробное сообщение об ошибке будет указано в Throwable.getMessage().
IOException — если происходит ошибка ввода-вывода, например ошибка связи, которую невозможно распознать как ошибку, указывающую на сбой операции в целевой виртуальной машине.
IllegalArgumentException — если ключи или значения в agentProperties недопустимы.
NullPointerException — если agentProperties имеет значение null.
Появилось в версии:
1.8

startLocalManagementAgent

public abstract String startLocalManagementAgent() throws IOException
Запускает локальный агент управления JMX в целевой виртуальной машине.

Дополнительные сведения см. в онлайн-документации «Мониторинг и управление с использованием технологии JMX».

Возвращает:
Строковое представление адреса службы локального коннектора. Это значение можно передать конструктору JMXServiceURL(String) для разбора.
Выбрасывает:
AttachOperationFailedException — если целевая виртуальная машина не может завершить операцию подключения. Более подробное сообщение об ошибке будет указано в Throwable.getMessage().
IOException — если происходит ошибка ввода-вывода, например ошибка связи, которую невозможно распознать как ошибку, указывающую на сбой операции в целевой виртуальной машине.
Появилось в версии:
1.8

hashCode

public int hashCode()
Возвращает хеш-код этого объекта VirtualMachine. Хеш-код основан на компонентах VirtualMachine и соответствует общему контракту метода Object.hashCode.
Переопределяет:
hashCode в классе Object
Возвращает:
Хеш-код этой виртуальной машины
См. также:
  • Object.equals(java.lang.Object)
  • System.identityHashCode(Object)

equals

public boolean equals(Object ob)
Проверяет, равен ли этот объект VirtualMachine другому объекту.

Если заданный объект не является VirtualMachine, этот метод возвращает false. Два объекта VirtualMachine считаются равными, если они ссылаются на одного и того же поставщика, а их identifiers равны.

Этот метод соответствует общему контракту метода Object.equals.

Переопределяет:
equals в классе Object
Параметры:
ob — объект, с которым сравнивается этот объект
Возвращает:
true тогда и только тогда, когда заданный объект является VirtualMachine и равен этому объекту VirtualMachine.
См. также:
  • Object.hashCode()
  • HashMap

toString

public String toString()
Возвращает строковое представление объекта VirtualMachine.
Переопределяет:
toString в классе Object
Возвращает:
строковое представление объекта

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/jdk.attach/com/sun/tools/attach/VirtualMachine.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API