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 незалежно.