当前位置: 首页 > 面试题库 >

当多个Java程序在同一台计算机上运行时

干稳
2023-03-14
问题内容

每个Java应用程序都将在特定的Java虚拟机实例中运行。我真的在以下方面感到困惑,而Google搜索使我更加困惑。不同网站上的不同文章。

  1. 如果我有一个用Java编写的Web服务,它将需要一个JVM实例来运行,那么JVM可以成为守护进程吗?

  2. 如果是,当我们运行任何其他Java应用程序时,它将使用该JVM实例还是创建一个新的JVM?

  3. 任何机器上可用的主内存是恒定的。当我们同时启动n个Java进程而不提供任何初始堆大小时,堆大小如何在进程之间分配?

  4. 是否有管理n个JVM实例的进程,或者由OS本身管理?

  5. GC发生世界末日时,是否会影响其他JVM实例(我认为是不同的线程)?


问题答案:

1)如果我有一个用Java编写的Web服务,它将需要一个JVM实例来运行。那么可以将JVM设为守护进程吗?

是的,它可以。如何完成取决于O / S和Web服务器容器本身。

2)如果是,当我们运行任何其他Java应用程序时,它将使用此JVM实例还是创建一个新的JVM?

否。每个Java应用程序都使用一个独立的JVM。

每个JVM是一个单独的进程,这意味着不会共享堆栈,堆等。(通常,唯一可以共享的内容是保存核心JVM和本机库代码的只读段,就像普通进程可以共享代码段一样。)

3)在任何机器上可用的主存储器是恒定的。当我们同时启动n个Java进程而不提供任何初始堆大小时,堆大小如何在进程之间分配?

如果不指定大小,则决定堆大小的机制取决于所使用的JVM /平台/版本,以及是否使用“客户端”或“服务器”模型(对于Hotspot
JVM)。启发式算法没有考虑其他JVM的数量或大小。

参考:https :
//stackoverflow.com/a/4667635/139985

实际上,最好直接指定堆大小。

4)是否有管理n个JVM实例的进程,或者由OS本身管理?

都不行
JVM实例的数量取决于可以启动进程的各种事物的动作。例如守护程序脚本,命令脚本,用户在命令行中键入命令等。最终,如果操作系统用尽了资源,则OS可能会拒绝启动更多进程,但是JVM与其他进程没有任何区别。

5)当GC期间发生世界末日时,是否会影响其他JVM实例(我认为是不同的线程)?

否。JVM是独立的进程。他们没有任何可变状态。垃圾收集在每个JVM上独立运行。



 类似资料:
  • 问题内容: Python网站上是否有官方文档,内容涉及如何在Linux的同一台计算机上安装和运行多个版本的Python? 我可以找到成千上万的博客文章和答案,但是我想知道是否有“标准”的官方方式来做到这一点? 还是全部取决于操作系统? 问题答案: 我认为这是完全独立的。只需安装它们,然后即可使用命令例如和。链接到您要用作默认值的那个。 无论如何,所有库都位于单独的文件夹中(以版本命名)。 如果要手

  • 我创建了一个应用程序,在我的计算机中,这个jar运行没有任何问题。我试着在另一台电脑上运行它,它什么都做不到。然后,我在另一台pc上尝试了同样的jar(如果你想这样看的话,是第三台),在那里,jar运行没有问题。所以我回到第二个,试着从命令行运行它,它给了我这个错误: “main”java.lang.UnsatisfiedLinkError头出现异常:无法加载库:C:\users\hectlr\l

  • 问题内容: 我刚刚发现我可以使用Python编写一个非常简单的Web服务器。我已经有一个Apache Web服务器,我想在这台机器上尝试基于Python的Web服务器。但是,如果尝试尝试,可能会引起某种冲突。我的意思是两个Web服务器将如何“决定”谁需要服务器处理来自客户端的请求? 问题答案: 让他们监听不同的端口,您会没事的。 默认的Web端口是80。当您在浏览器中打开某些网址而不指定端口时,默

  • 问题内容: 我可以使用一台可以访问10个内核的机器-我想实际使用它们。我习惯在自己的机器上做的事情是这样的: 我要执行10个文件-我们将其称为blah00.fa,blah01.fa,… blah09.fa。 这种方法的问题在于,myProgram一次仅使用1个内核,并且在多核计算机上这样做,我将一次使用10个内核,因此我不会使用mahcine来其最大能力。 如何更改脚本,以使其同时运行所有10个.

  • 5.12.1. 在Windows下运行多个服务器 5.12.2. 在Unix中运行多个服务器 5.12.3. 在多服务器环境中使用客户端程序 在一些情况下,你可能想要在同一台机器上运行多个mysqld服务器。你可能想要测试一个新的MySQL发布,同时不影响现有产品的设置。或者,你可能想使不同的用户访问来访问不同的mysqld服务器以便他们自己来管理。(例如,你可能是一个Internet服务提供商,

  • 我有一个应用程序在各种OSGI捆绑包中分离,这些捆绑包在单个Apache Karaf实例上运行。但是,我想迁移到微服务框架,因为 Apache Karaf由于其依赖机制和 我希望以后能够将应用程序带到云端(AWS、GCloud等) 我做了一些研究,查看了各种框架,并得出结论,Quarkus可能是正确的选择,因为它基于容器的方法、性能和可能的云集成机会。 现在,我在某一点上苦苦挣扎,到目前为止我还没