1) Если у меня есть веб-служба, написанная на java, для запуска ей потребуется экземпляр JVM. Так можно ли сделать JVM процессом демона?
Да, оно может. Как это делается, зависит от операционной системы и самого контейнера веб-сервера.
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) Когда происходит остановка мира во время сборки мусора, затрагиваются ли другие экземпляры JVM (я полагаю, разные потоки)?
Нет. JVM - это независимые процессы. У них нет никаких изменчивых состояний. Сборка мусора работает на каждой JVM независимо.