Spec-Zone.ru › OpenJDK 17

Класс VirtualMachine

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

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

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

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

Следующий пример демонстрирует, как можно использовать 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 запускается в целевом процессе с использованием предоставленных аргументов. Наконец, клиент отсоединяется от целевой ВМ.

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

Since:
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.

Методы, объявленные в классе java.lang.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, представляющий целевую VM.
Исключения:
SecurityException - Если установлен менеджер безопасности и он отказывается AttachPermission ("attachVirtualMachine"), или другое разрешение, необходимое для реализации.
AttachNotSupportedException - Если метод attachVirtualmachine всех установленных поставщиков выбрасывает AttachNotSupportedException, или поставщики не установлены.
IOException - Если произошла ошибка ввода-вывода
NullPointerException - Если id имеет значение null.

attach

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

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

Параметры:
vmd - Описатель виртуальной машины.
Возвращаемое значение:
VirtualMachine, представляющий целевую VM.
Исключения:
SecurityException - Если установлен менеджер безопасности и он отказывается AttachPermission ("attachVirtualMachine"), или другое разрешение, необходимое для реализации.
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 развертывается платформенно-специфическим способом, но обычно это эквивалент динамической библиотеки на платформе. В качестве альтернативы, он может быть статически связан с VM. Этот метод вызывает загрузку указанной библиотеки агента в целевую VM (если она еще не загружена или не статически связана с VM). Затем он заставляет целевую VM вызвать функцию Agent_OnAttach или, для статически связанного агента с именем 'L', функцию Agent_OnAttach_L, как указано в спецификации JVM Tools Interface. Обратите внимание, что функция Agent_OnAttach[_L] вызывается даже если библиотека агента была загружена до вызова этого метода.

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

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

Параметры:
agentLibrary - Имя библиотеки агента.
options - Параметры для функции Agent_OnAttach[_L] (может быть null).
Исключения:
AgentLoadException - Если библиотека агента не существует, библиотека агента не статически связана с VM или библиотека агента не может быть загружена по другой причине.
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 - Если библиотека агента не существует, библиотека агента не статически связана с VM или библиотека агента не может быть загружена по другой причине.
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 в исключении.

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

loadAgentPath

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

Этот метод удобства работает так, как если бы он вызывался:

loadAgentPath(agentLibrary, null);
Parameters:
agentPath - Полный путь к библиотеке агента.
Throws:
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.

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

loadAgent

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

Этот метод удобства работает так, как если бы он вызывался:

loadAgent(agent, null);
Parameters:
agent - Путь к файлу JAR, содержащему агента.
Throws:
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.

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

getAgentProperties

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

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

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

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

startManagementAgent

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

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

См. онлайн-документацию по Мониторингу и управлению с помощью технологии JMX для получения дополнительной информации.

Parameters:
agentProperties - Объект Properties, содержащий свойства конфигурации для агента.
Throws:
AttachOperationFailedException - Если целевая виртуальная машина не может выполнить операцию подключения. Более подробное сообщение об ошибке будет предоставлено методом Throwable.getMessage().
IOException - Если произошла ошибка ввода-вывода, например, ошибка связи, которую нельзя идентифицировать как ошибку, указывающую на то, что операция завершилась неудачно в целевой виртуальной машине.
IllegalArgumentException - Если ключи или значения в agentProperties неверны.
NullPointerException - Если agentProperties равно null.
Since:
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(java.lang.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
Возвращает:
строковое представление объекта.

© 1993, 2021, 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/17/docs/api/jdk.attach/com/sun/tools/attach/VirtualMachine.html

Spec-Zone.ru

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