Когда несколько программ java работают на одной машине
каждое приложение java будет выполняться в определенном экземпляре виртуальной машины Java. Я действительно запутываюсь в нижеприведенных аспектах, и гуглинг запутал меня еще больше. Разные статьи на разных сайтах.
Если у меня есть веб-служба, написанная на java, ей понадобится экземпляр JVM для run.So можно ли сделать JVM демоническим процессом?
Если да, то при запуске любого другого приложения java он будет использовать этот экземпляр JVM или создать новый один?
основная память, доступная в любой машине, постоянна. Когда мы запускаем N процессов java одновременно, не предоставляя никакого начального размера кучи, как размер кучи распределяется между процессами?
есть ли какой-либо процесс, который управляет n количеством экземпляров JVM или он управляется самой ОС?
когда stop-the-world происходит во время GC, это другие экземпляры JVM(разные потоки, которые я предполагаю) пострадали?
2 ответов:
1) Если у меня есть веб-служба, написанная на java, для ее запуска потребуется экземпляр JVM. Так можно ли сделать JVM демоническим процессом?
да, может. Как это делается, зависит от O/S и от самого контейнера веб-сервера.
2) если да, то при запуске любого другого приложения java он будет использовать этот экземпляр JVM или создать новый?
нет. Каждый Java-приложение использует независимую виртуальной машины.
каждый JVM является a отдельный процесс, и это означает, что нет обмена стеки, кучи и т. д. (Как правило, единственные вещи, которые могут быть общими, - это сегменты только для чтения, которые содержат код основных JVM и собственных библиотек ... точно так же, как обычные процессы могут совместно использовать сегменты кода.)
3) основная память, доступная в любой машине, постоянна. Когда мы запускаем N процессов java одновременно без предоставления какого-либо начального размера кучи, как распределяется размер кучи между процессы?
механизм определения размера кучи, если вы не укажете ее размер, зависит от используемой версии JVM / platform / и от того, используете ли вы модель "клиент" или "сервер" (для Jvms Hotspot). Эвристика не учитывает количество или размер других JVM.
ссылка:https://stackoverflow.com/a/4667635/139985
на практике вам, вероятно, было бы лучше указать размер кучи непосредственно.
4) Есть ли какой-либо процесс, который управляет n количеством экземпляров JVM или он управляется самой ОС?
ни. Количество экземпляров JVM определяется действиями различных вещей, которые могут запускать процессы; например, сценарии демонов, командные сценарии, пользователи, вводящие команды в командной строке и т. д. В конечном счете, ОС может отказаться запускать какие-либо процессы, если у нее закончатся ресурсы, но JVM не обрабатываются иначе, чем другие процессы.
5) Когда stop-the-world происходит во время GC, затронуты ли другие экземпляры JVM(разные потоки, которые я предполагаю)?
нет. СПМ являются независимыми процессами. Они не разделяют никакого изменчивого состояния. Сбор мусора работает на каждом JVM независимо.
- посмотреть Как демонизировать программу Java?
- будет создан новый экземпляр JVM
- так же, как память делится между всеми другими процессами
- Он управляется O / S
- другие экземпляры не затрагиваются
если ваши экземпляры должны координировать свою работу, вы можете создать один главный экземпляр, который будет запускать/останавливать другие экземпляры.
вы не объяснили, зачем вам нужны несколько экземпляров JVM. Возможно, один экземпляр будет работать лучше.
Comments