jvm 一个虚拟机上有多个类似的Java程序

z5btuh9x  于 2022-11-07  发布在  Java
关注(0)|答案(1)|浏览(107)

我的问题是关于JVM中的命名空间以及它是如何处理它们的。2为了使这篇文章中的命名法更简单一些,我把虚拟机如Virtual Box或VM Ware称为虚拟机,把Java虚拟机称为虚拟机。
假设我有一个在物理机器上运行的虚拟机。在这个虚拟机中安装了一个Java运行时。现在我在其中运行一个Java程序,然后让它继续运行。之后我再次运行同一个Java程序。(通过运行"程序的java名称“,所以这里没有什么特别的)JVM如何处理这两个java程序的内存区域?会不会因为第二个程序使用相同的命名空间和变量名而干扰第一个程序的变量?
此外,如果我在同一个物理硬件上有两个不同的虚拟盒,并在每个虚拟盒上启动同一个java程序的一个示例,它们将如何表现?
我问这个问题是因为我正在和一个你可以说是java大师讨论这个问题。他声称即使在第二种情况下,两个程序也会互相干扰,因为虚拟盒子里的java程序使用主机系统的java虚拟机。我尊重这个家伙的知识和经验,我是java noob,但这与我对IT的直觉相悖,因为通常我会说每个程序都在自己的进程中运行,有自己的变量,也有自己的虚拟机,因此不能与任何其他进程的变量混淆。在第二种情况下,我甚至会说每个虚拟盒子都在它自己的进程中,在它的物理盒子中有自己的内存区域。这不会是一个巨大的安全威胁吗?2在网络中,许多服务器都是虚拟化的,在一台物理机器上有不同客户的几个虚拟服务器。如果我发现另一个客户的虚拟机上运行的是什么java程序,难道我不能摆弄他的变量吗?如果是这样的话,我想我会在互联网上找到一些关于这个问题的东西,但我搜索了一个小时,没有找到一个单一的来源。(虚拟机与java虚拟机并没有使互联网搜索更容易)

2cmtqfgy

2cmtqfgy1#

单独的进程不共享内存(除非有意编程)。只要机器有足够的资源(cpu/ram/disk等),你可以很容易地同时运行几个JVM。
但是,一次只有一个进程可以绑定到网络接口上的一个端口号。

相关问题