Ответ 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 независимо.