【发布时间】:2021-08-06 22:24:46
【问题描述】:
我的问题是关于 JVM 中的命名空间以及它如何处理它们。 为了使本文中的命名更容易一些,我将 Virtual Box 或 VM Ware 等虚拟机称为虚拟机,将 Java 虚拟机称为虚拟机。
假设我有一个在物理机上运行的虚拟机。 A 在此虚拟框中安装了 Java 运行时。现在我在其中运行一个 Java 程序并让它继续运行。之后,我再次运行相同的 Java 程序。 (通过运行'java nameoftheProgram',所以这里没什么特别的) JVM 是如何处理这两个 java 程序的内存区域的?第二个程序会不会因为两个程序使用相同的命名空间和变量名而干扰了第一个程序的变量?
此外,如果我在同一物理硬件上拥有两个不同的 Virtual Box,并在每个虚拟机上启动同一个 Java 程序的一个实例,它们的行为会如何?
我问这个问题是因为我一直在与你可以说的 java 大师讨论这个问题。 他声称即使在第二种情况下,这两个程序也会相互干扰,因为虚拟盒子内的 java 程序使用主机系统的 java 虚拟机。 我尊重这些人的知识和经验,我是 java 菜鸟,但这违背了我拥有的每一个 IT 直觉。因为通常我会说每个程序都在自己的进程中运行,并且有自己的变量和自己的虚拟机,因此不能与任何其他进程的变量混淆。在第二种情况下,我什至会说每个虚拟盒子都在它自己的进程中,在它的物理盒子里有自己的内存区域。 如果连第二种情况都属实,这难道不是一个巨大的安全威胁吗?在网络中,许多服务器被虚拟化,并且在一台物理机器上存在不同客户的多个虚拟服务器。如果我发现他的虚拟盒子上正在运行什么 java 程序,我不能摆弄不同客户的变量吗? 如果那是真的,我想我会在互联网上找到有关此问题的信息,但我搜索了一个小时却没有找到单一来源。 (虚拟机与 java 虚拟机并没有让互联网搜索更容易)
【问题讨论】:
-
我会说您的 IT 直觉是正确的。在这两种情况下。
标签: java jvm virtual-machine