Интерфейс VirtualMachineManager
public interface VirtualMachineManager
VirtualMachine для доступных целевых ВМ. Подключения можно устанавливать с помощью одного из нескольких различных объектов Connector. Каждый коннектор реализует свой способ подключения отладчика к целевой ВМ.
VirtualMachineManager поддерживает множество различных сценариев подключения отладчика к виртуальной машине. Ниже в таблице приведены четыре примера. В примерах используется синтаксис командной строки реализации Sun. Некоторые реализации Connector могут требовать несколько иного порядка действий, чем описано ниже.
| Сценарий | Описание |
|---|---|
| Отладчик запускает целевую ВМ (самый простой и распространённый сценарий) | Отладчик вызывает метод LaunchingConnector.launch(java.util.Map) коннектора по умолчанию, полученного с помощью defaultConnector(). Запускается целевая ВМ и устанавливается соединение между этой ВМ и отладчиком. Возвращается зеркало VirtualMachine. Или, если требуется больший контроль:
|
| Отладчик подключается к уже запущенной ВМ |
|
| Целевая ВМ подключается к уже запущенному отладчику |
|
| Целевая ВМ запускает отладчик (иногда это называется отладкой «точно в срок») |
|
Коннекторы создаются при запуске, то есть при первом вызове метода Bootstrap.virtualMachineManager(). Список всех коннекторов, созданных при запуске, можно получить из VirtualMachineManager, вызвав метод allConnectors.
При запуске создаются коннекторы, установленные на платформе. Кроме того, VirtualMachineManager автоматически создаёт коннекторы для инкапсуляции всех реализаций TransportService, установленных на платформе. Здесь описаны оба способа создания коннекторов.
Коннектор считается установленным на платформе, если он установлен в JAR-файле, доступном для определяющего загрузчика классов типа Connector, и этот JAR-файл содержит файл конфигурации поставщика с именем Connector в каталоге ресурсов META-INF/services, а в файле конфигурации поставщика указано полное имя класса реализации коннектора. Коннектор — это класс, реализующий интерфейс Connector. Точнее, класс реализует один из конкретных типов коннекторов: AttachingConnector, ListeningConnector или LaunchingConnector. Формат файла конфигурации поставщика: полное имя класса в каждой строке. Пробелы и символы табуляции вокруг каждого имени класса, а также пустые строки игнорируются. Символ комментария — '#' (0x23); все символы после первого символа комментария в каждой строке игнорируются. Файл должен быть закодирован в UTF-8.
При запуске VirtualMachineManager пытается загрузить и создать экземпляр (с помощью конструктора без аргументов) каждого класса, указанного в файле конфигурации поставщика. Исключения, возникающие при загрузке или создании коннектора, перехватываются и игнорируются. Иными словами, процесс запуска продолжается, несмотря на ошибки.
Помимо коннекторов, установленных на платформе, VirtualMachineManager также создаёт коннекторы для инкапсуляции всех реализаций TransportService, установленных на платформе. Служба транспорта считается установленной на платформе, если она установлена в JAR-файле, доступном для определяющего загрузчика классов типа TransportService, и этот JAR-файл содержит файл конфигурации поставщика с именем TransportService в каталоге ресурсов META-INF/services, а в файле конфигурации поставщика указано полное имя класса реализации службы транспорта. Служба транспорта — это конкретный подкласс TransportService. Формат файла конфигурации поставщика такой же, как у файла конфигурации поставщика для коннекторов, за исключением того, что каждое указанное имя класса должно быть полным именем класса, реализующего интерфейс TransportService.
Для каждой службы транспорта, установленной на платформе, VirtualMachineManager создаёт соответствующие AttachingConnector и ListeningConnector. Эти коннекторы создаются для инкапсуляции Transport, который, в свою очередь, инкапсулирует службу транспорта. Имя AttachingConnector формируется из имени службы транспорта с добавлением строки Attach. Например, если метод name() службы транспорта возвращает telepathic, то имя AttachingConnector будет telepathicAttach. Аналогично, имя ListeningConnector формируется добавлением строки Listen к имени службы транспорта. Метод description() как AttachingConnector, так и ListeningConnector делегирует вызов методу description() базовой службы транспорта. У AttachingConnector и ListeningConnector будет по два аргумента коннектора Arguments. StringArgument с именем address — это аргумент коннектора для указания адреса подключения или прослушивания. IntegerArgument с именем timeout — это аргумент коннектора для указания времени ожидания при подключении или принятии соединения. Аргумент времени ожидания может игнорироваться в зависимости от того, поддерживает ли служба транспорта время ожидания при подключении или принятии соединения.
Инициализация менеджера виртуальных машин завершится неудачей, то есть метод Bootstrap.virtualMachineManager() выбросит ошибку, если менеджер виртуальных машин не сможет создать ни одного коннектора.
- Начиная с версии:
- 1.3
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
List |
allConnectors() |
Возвращает список всех известных объектов Connector. |
List |
attachingConnectors() |
Возвращает список известных объектов AttachingConnector. |
List |
connectedVirtualMachines() |
Перечисляет все целевые ВМ, подключённые к отладчику. |
VirtualMachine |
createVirtualMachine |
Создаёт новую виртуальную машину. |
VirtualMachine |
createVirtualMachine |
Создаёт зеркало виртуальной машины для целевой ВМ. |
LaunchingConnector |
defaultConnector() |
Определяет коннектор по умолчанию. |
List |
launchingConnectors() |
Возвращает список известных объектов LaunchingConnector. |
List |
listeningConnectors() |
Возвращает список известных объектов ListeningConnector. |
int |
majorInterfaceVersion() |
Возвращает номер основной версии интерфейса JDI. |
int |
minorInterfaceVersion() |
Возвращает номер дополнительной версии интерфейса JDI. |
Подробное описание методов
defaultConnector
LaunchingConnector defaultConnector()
- Возвращает:
- коннектор по умолчанию
LaunchingConnector
launchingConnectors
List<LaunchingConnector> launchingConnectors()
LaunchingConnector. Любой из возвращённых объектов можно использовать для запуска новой целевой ВМ и немедленного создания для неё зеркала VirtualMachine. Обратите внимание: стабильность целевой ВМ, запущенной коннектором запуска, не гарантируется до получения события VMStartEvent.- Возвращает:
- список объектов
LaunchingConnector.
attachingConnectors
List<AttachingConnector> attachingConnectors()
AttachingConnector. Любой из возвращённых объектов можно использовать для подключения к существующей целевой ВМ и создания для неё зеркала VirtualMachine.- Возвращает:
- список объектов
AttachingConnector.
listeningConnectors
List<ListeningConnector> listeningConnectors()
ListeningConnector. Любой из возвращённых объектов можно использовать для ожидания подключения, инициированного целевой ВМ, и создания для неё зеркала VirtualMachine.- Возвращает:
- список объектов
ListeningConnector.
allConnectors
connectedVirtualMachines
List<VirtualMachine> connectedVirtualMachines()
VirtualMachine для всех целевых ВМ, которые инициировали подключение, а также для всех целевых ВМ, к которым подключился этот менеджер. Целевая ВМ остаётся в этом списке до тех пор, пока не будет отключена. После удаления ВМ из списка в очередь событий помещается событие VMDisconnectEvent.- Возвращает:
- список объектов
VirtualMachine, каждый из которых является зеркалом целевой ВМ.
majorInterfaceVersion
int majorInterfaceVersion()
VirtualMachine.version() сведения о версии целевой ВМ и VirtualMachine.description() дополнительные сведения о версии.- Возвращает:
- целое число, обозначающее номер основной версии.
minorInterfaceVersion
int minorInterfaceVersion()
VirtualMachine.version() сведения о версии целевой ВМ и VirtualMachine.description() дополнительные сведения о версии.- Возвращает:
- целое число, обозначающее номер дополнительной версии
createVirtualMachine
VirtualMachine createVirtualMachine(Connection connection, Process process) throws IOException
Создаёт зеркало виртуальной машины для целевой ВМ, для которой уже существует Connection. Подключение создаётся, когда Connector устанавливает соединение и успешно выполняет рукопожатие с целевой ВМ. Затем коннектор может использовать этот метод для создания зеркала виртуальной машины, представляющего составное состояние целевой ВМ.
Аргумент process задаёт объект Process целевой ВМ. В качестве значения можно указать null. Если целевая ВМ запущена коннектором LaunchingConnector, аргумент process следует указать; в противном случае вызов VirtualMachine.process() для созданной виртуальной машины вернёт null.
Этот метод предназначен для создания коннекторами зеркала виртуальной машины при установлении соединения с целевой ВМ. Непосредственно использовать этот метод должны только разработчики новых реализаций коннекторов.
- Параметры:
-
connection— открытое соединение с целевой ВМ. -
process— если ВМ запущена, объектProcessцелевой ВМ. Если ВМ не запущена, указываетсяnull. - Возвращает:
- новая виртуальная машина, представляющая целевую ВМ.
- Выбрасывает:
-
IOException— если произошла ошибка ввода-вывода -
IllegalStateException— если соединение не открыто - Начиная с версии:
- 1.5
- См. также:
createVirtualMachine
VirtualMachine createVirtualMachine(Connection connection) throws IOException
Этот вспомогательный метод работает так, как если бы был вызван метод createVirtualMachine(Connection, Process) с указанием null в качестве аргумента process.
Этот метод предназначен для создания коннекторами зеркала виртуальной машины при установлении соединения с целевой ВМ. Непосредственно использовать этот метод должны только разработчики новых реализаций коннекторов.
- Возвращает:
- новая виртуальная машина
- Выбрасывает:
-
IOException— если произошла ошибка ввода-вывода -
IllegalStateException— если соединение не открыто - Начиная с версии:
- 1.5
© 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.jdi/com/sun/jdi/VirtualMachineManager.html