Когда несколько java-программ работают на одном компьютере

Каждое приложение Java будет запускаться в конкретном экземпляре виртуальной машины Java. Я действительно запутался в нижних аспектах, и Гуглинг еще больше смутил меня. Различные статьи на разных сайтах.

  • Если у меня есть веб-служба, написанная в java, для запуска будет нужен экземпляр JVM. Можно ли JVM сделать процесс демона?

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

  • Основная память, доступная на любой машине, постоянна. Когда мы начинаем n java-процессы одновременно, не предоставляя никакого начального размера кучи, как размер кучи распределяется между процессами?

  • Есть ли какой-либо процесс, который управляет n количеством экземпляров JVM или управляется самой ОС?

  • Когда остановка-мир происходит во время GC, затрагиваются другие экземпляры JVM (разные потоки, которые я предполагаю)?

Ответ 1

1) Если у меня есть веб-служба, написанная в java, для запуска будет нужен экземпляр JVM. Итак, можно ли JVM сделать процесс демона?

Да, может. Как это делается, зависит от O/S и самого контейнера веб-сервера.

2) Если да, когда мы запускаем любое другое Java-приложение, оно будет использовать этот экземпляр JVM или создать новый?

Нет. Каждое приложение Java использует независимую JVM.

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

3) Основная память, доступная на любой машине, постоянна. Когда мы начинаем n java-процессы одновременно без предоставления начального размера кучи, как размер кучи распределяется между процессами?

Механизм принятия решения о том, насколько большой размер кучи, если вы не укажете размер, зависит от используемой JVM/платформы/версии и использует ли вы модель "клиент" или "сервер" (для JVM Hotspot). Эвристика не учитывает количество или размер других JVM.

Ссылка: fooobar.com/questions/13542/...

На практике вам, вероятно, будет лучше задавать размер кучи напрямую.

4) Существует ли какой-либо процесс, который управляет n количеством экземпляров JVM или управляется самой ОС?

Ни. Количество экземпляров JVM определяется действиями различных вещей, которые могут запускать процессы; например сценарии демонов, командные сценарии, команды ввода команд в командной строке и т.д. В конечном итоге ОС может отказаться от запуска каких-либо процессов, если у нее закончились ресурсы, но JVM не обрабатываются иначе, чем другие процессы.

5) Когда stop-the world происходит во время GC, другие JVM-экземпляры (разные потоки, которые я предполагаю) затронули?

Нет. JVM - независимые процессы. Они не разделяют какое-либо изменчивое государство. Сбор мусора работает на каждой JVM независимо.

Ответ 2

  • см. Как демонировать программу Java?
  • будет создан новый экземпляр JVM
  • так же, как память распределяется между всеми другими процессами.
  • он управляется O/S
  • другие экземпляры не затрагиваются

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

Вы не объяснили, почему вам нужны несколько экземпляров JVM. Вероятно, один экземпляр будет работать лучше.