Что запускает поток JVM? - PullRequest
       53

Что запускает поток JVM?

3 голосов
/ 02 ноября 2010

(Пожалуйста, поправьте меня, если я ошибаюсь)

Я понимаю, что когда вы запускаете Java-программу с помощью команды java,

java MyProg

программа будет запущена на новой JVM.

  • Что загружает программу в новую JVM? это JRE порождает новую тему?

  • Если каждая программа работает в своей собственной JVM, могут ли они общаться друг с другом?

  • Ранее я задавал вопрос о том, как использовать JMX для отправки запросов в Java-программу, работающую локально. Я обнаружил, что если команды JMX выдаются локально, мне не нужен номер порта. Ответ состоял в том, что клиентское приложение (например, jconsole, jvisualvm, jprobe и т. Д.) Выполняет поиск Java-приложений, запущенных на компьютере. Это нормально, но, учитывая, что клиентское приложение будет работать в другой JVM, чем приложение, которое оно хочет контролировать или с которым разговаривать, как именно они взаимодействуют друг с другом без номера порта (так как они не работают на той же JVM)?

  • Если запущены две программы, обычно будет 2 JVM. Работают ли JVM в одном и том же процессе JRE? И также не означает ли это, что две JVM должны иметь возможность общаться?

Спасибо

Ответы [ 3 ]

6 голосов
/ 02 ноября 2010
  • Программа (точнее, скомпилированный класс) загружается компонентом в JVM, который называется System Class Loader.(Подробнее о загрузчиках классов здесь ).JVM использует библиотеки собственного кода (загружаемые загрузчиком классов начальной загрузки) для создания нового потока.
  • Они могут взаимодействовать с использованием сокетов, RPC и других механизмов IPC (обычно доступ к которым осуществляется с помощью собственных библиотек).
  • Не знаю точного ответа, но должен быть стандартный порт.
  • Различные экземпляры JVM - это отдельные процессы.Они не разделяют ничего в памяти.(Хотя при работе в одной системе они могут совместно использовать библиотеки и файлы конфигурации одной и той же установки JRE. Это ничем не отличается от запуска двух экземпляров Firefox, Emacs или некоторых других приложений в одной системе).
2 голосов
/ 02 ноября 2010

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

2 голосов
/ 02 ноября 2010

Существует несколько способов взаимодействия программ в разных jvms:

  1. ObjectInputStream, ObjectOutputStream

  2. RMI

  3. розетки

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