Коли кілька програм Java працюють на одній машині


83

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

  1. Якщо у мене є веб-служба, написана на Java, для її запуску потрібен екземпляр JVM. Тож чи можна зробити JVM процесом демона?

  2. Якщо так, коли ми запускаємо будь-яке інше додаток Java, воно буде використовувати цей екземпляр JVM або створити новий?

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

  4. Чи існує який-небудь процес, який управляє n кількістю екземплярів JVM, або це керується самою ОС?

  5. Коли зупинка світу відбувається під час GC, чи впливають інші екземпляри JVM (різні потоки, я припускаю)?


2
Ваш перший пункт залежить від реалізації контейнера ...
MadProgrammer

6
+1 для детального пояснення та вивчення питання перед тим, як задавати.
amod

Відповіді:


80

1) Якщо у мене є веб-служба, написана на Java, для запуску потрібен екземпляр JVM. Тож чи можна JVM зробити процесом демона?

Так це може. Як це робиться, залежить від O / S та від самого контейнера веб-сервера.

2) Якщо так, коли ми запускаємо будь-яке інше додаток Java, воно буде використовувати цей екземпляр JVM або створити новий?

Ні. Кожна програма Java використовує незалежну JVM.

Кожна JVM - це окремий процес, і це означає, що немає спільного використання стеків, куп та ін. (Як правило, єдиним, що може бути спільним, є сегменти лише для читання, які містять код базової JVM та власні бібліотеки ... так само, як звичайні процеси можуть спільно використовувати сегменти коду.)

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

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

Довідково: https://stackoverflow.com/a/4667635/139985

На практиці вам, мабуть, було б краще вказати розмір купи безпосередньо.

4) Чи існує який-небудь процес, який управляє n кількістю екземплярів JVM, або це керується самою ОС?

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

5) Коли зупинка світу відбувається під час GC, чи впливають інші екземпляри JVM (різні потоки, я припускаю)?

Ні. JVM - це незалежні процеси. Вони не мають жодного змінного стану. Вивіз сміття працює на кожному JVM незалежно.


10
  1. див. Як демонізувати програму Java?
  2. буде створено новий екземпляр JVM
  3. так само, як пам'ять розподіляється між усіма іншими процесами
  4. ним керує O / S
  5. інші випадки це не впливає

Якщо ваші екземпляри повинні координувати свою роботу, ви можете створити єдиний основний екземпляр, який запускав би / зупиняв інші екземпляри.

Ви не пояснили, навіщо потрібні кілька екземплярів JVM. Можливо, один примірник буде працювати краще.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.