#java #jvm #virtual-machine
Вопрос:
мой вопрос касается пространств имен в JVM и того, как он их обрабатывает. Чтобы немного упростить номенклатуру в этом посте, я называю виртуальные машины, такие как Virtual Box или виртуальная машина, виртуальными коробками, а виртуальную машину Java-виртуальной машиной.
Допустим, у меня есть виртуальная коробка, работающая на физической машине. A установите среду выполнения Java в этом виртуальном окне. Теперь я запускаю в нем программу Java один раз и оставляю ее запущенной. После этого я снова запускаю ту же самую программу Java. (Запустив «java-программу с именем», так что здесь ничего особенного не происходит) Как JVM обрабатывает области памяти этих двух java-программ? Может ли случиться так, что вторая программа вмешивается в переменные первой программы, потому что обе программы используют одно и то же пространство имен и имена переменных?
Кроме того, если бы у меня были два разных виртуальных ящика на одном и том же физическом оборудовании и я запустил по одному экземпляру одной и той же java-программы на каждом из них, как бы они себя вели?
Я задаю этот вопрос, потому что у меня есть постоянная дискуссия по этому поводу с гуру Java, вы могли бы сказать. Он утверждает, что даже во втором случае две программы мешают друг другу, потому что java-программы внутри виртуальных ящиков используют виртуальную машину java хост-системы. Я уважаю знания и опыт этих парней, ява-нуб, которым я являюсь, но это противоречит моей интуиции в области информационных технологий. Потому что обычно я бы сказал, что каждая программа выполняется в своем собственном процессе и имеет свои собственные переменные, а также собственную виртуальную машину, и поэтому не может связываться с переменными любого другого процесса. Во втором случае я бы даже сказал, что каждый виртуальный ящик находится в своем собственном процессе с собственной областью памяти в своем физическом ящике. Если даже второй случай верен, не будет ли это огромной угрозой безопасности? В Интернете многие серверы виртуализированы, и на одной физической машине имеется несколько виртуальных серверов разных клиентов. Не мог бы я повозиться с переменными другого клиента, если бы узнал, какие программы java запущены в его виртуальном ящике? Если это правда, я думаю, что нашел бы что-нибудь в Интернете по этому вопросу, но я искал целый час, не найдя ни одного источника. (виртуальная машина по сравнению с виртуальной машиной java, однако, не облегчает доступ в Интернет)
Комментарии:
1. Я бы сказал, что ваша ИТ-интуиция верна. В обоих случаях.
Ответ №1:
Отдельные процессы не используют общую память (если только они специально не запрограммированы). Вы можете легко запускать несколько JVM одновременно, если у машины достаточно ресурсов (процессор/оперативная память/диск и т. Д.).
Однако существует только один процесс, который может одновременно привязываться к номеру порта в сетевом интерфейсе. Вот почему один веб-сервер может обслуживать несколько приложений
Комментарии:
1. спасибо вам за ваш комментарий. Да, я знаю, что программы должны быть способны управлять ресурсами, которые существуют только один раз, такими как файлы, сетевые карты и т. Д. и т. Д. Этот вопрос касается исключительно программ и их переменных.
2. Тогда ответ будет «Нет».