2010-11-02 10 views
3

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

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

java MyProg 

программа будет работать на новой виртуальной машины Java.

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

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

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

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

Благодаря

ответ

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

... должен быть стандартный порт или какой-либо другой механизм IPC для конкретной конкретной страны (например, именованные каналы или shmem в Unix). – ShiDoiSi

2

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

  1. ObjectInputStream, ObjectOutputStream

  2. RMI

  3. розетки

2

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

Смежные вопросы