Каждое приложение Java запускается в определенном экземпляре виртуальной машины Java. Я действительно запутался в следующих аспектах, а поиск в Google запутал меня еще больше. Разные статьи на разных сайтах.
Если у меня есть веб-служба, написанная на java, для ее запуска потребуется экземпляр JVM. Можно ли сделать JVM процессом-демоном?
Если да, когда мы запускаем любое другое приложение Java, оно будет использовать этот экземпляр JVM или создать новый?
Оперативная память, доступная на любой машине, постоянна. Когда мы запускаем n java-процессов одновременно без предоставления начального размера кучи, как размер кучи распределяется между процессами?
Есть ли какой-либо процесс, который управляет n экземплярами JVM, или он управляется самой ОС?
Когда происходит остановка мира во время сборки мусора, затрагиваются ли другие экземпляры JVM (я полагаю, разные потоки)?
Ответы:
Да, оно может. Как это делается, зависит от операционной системы и самого контейнера веб-сервера.
Нет. Каждое приложение Java использует независимую JVM.
Каждая JVM - это отдельный процесс, а это означает, что нет совместного использования стеков, куч и т. Д. (Как правило, единственное, что может быть общим, - это сегменты только для чтения, которые содержат код основной JVM и собственных библиотек ... так же, как обычные процессы могут совместно использовать сегменты кода.)
Механизм определения размера кучи, если вы не укажете размер, зависит от используемой JVM / платформы / версии, а также от того, используете ли вы модель «клиент» или «сервер» (для JVM Hotspot). Эвристика не учитывает количество или размер других JVM.
Ссылка: https://stackoverflow.com/a/4667635/139985
На практике вам, вероятно, будет лучше напрямую указать размер кучи.
Ни то, ни другое. Количество экземпляров JVM определяется действиями различных вещей, которые могут запускать процессы; например, сценарии демонов, командные сценарии, пользователи, вводящие команды в командной строке и т. д. В конечном итоге ОС может отказаться запускать какие-либо другие процессы, если у нее заканчиваются ресурсы, но JVM не обрабатываются иначе, чем другие процессы.
Нет. JVM - это независимые процессы. У них нет никаких изменчивых состояний. Сборка мусора работает на каждой JVM независимо.
источник
Если вашим экземплярам необходимо координировать свою работу, вы можете создать один главный экземпляр, который будет запускать / останавливать другие экземпляры.
Вы не объяснили, зачем вам нужно несколько экземпляров JVM. Наверное, лучше подойдет единичный экземпляр.
источник