每个Java应用程序是否有一个JVM?

所有正在运行的Java应用程序使用的JVM是否相同,或者“每个Java应用程序有一个JVM”是否适用? (比如应用程序是IntelliJ IDEA,例如服务器和NetBeans)

而且,每个Java应用程序使用的JVM和进程之间是否有连接?

一般来说,每个应用程序都会得到自己的JVM实例和自己的OS级进程,每个JVM实例是相互独立的。

有一些实现细节,例如类数据共享 ,其中多个JVM实例可能共享某些数据/内存,但这些应用程序对应用程序没有用户可见的影响(希望有更好的启动时间除外)。

然而,常见的情况是运行多个Web应用程序的单个应用程序服务器(或“Web服务器”),例如Glassfish或Tomcat。 在这种情况下,多个Web应用程序可以共享一个JVM。

每个Java应用程序有一个JVM。 除非你build立一个networking,否则它们之间不应该有任何联系。 如果您正在使用IDE,则您编写的代码通常运行在单独的JVM中。 IDE通常会连接单独的JVM进行debugging。 如果您正在处理多个Web应用程序,那么如果将它们部署到同一个Web容器,则可以共享相同的JVM。

运行的JVM数量是调用的可执行文件的数量。 每个这样的应用程序调用它自己的java可执行文件(java.exe / javaw.exe etx for windows),这意味着每个应用程序都运行在单独的JVM中。

任何共享库的应用程序将共享这些库的相同副本。 Java有相当多的共享库。 但是,除了保存的内存以外,您不会注意到这些差异。

理论上你可以在JVM中运行多个应用程序。 在实践中,他们可以以各种方式相互干扰。 例如:

The JVM has one set of System.in/out/err, one default encoding, one default locale, one set of system properties, and so on. If one application changes these, it affects all applications. Any application that calls System.exit() kills all applications. If one application thread goes wild, and consumes too much CPU or memory it will affect the other applications too. 

Refrence

不过这里晚了点,这个信息可能对某个人有用。 在Linux系统中,如果你想知道有多less个JVM正在运行,首先你可以用ps -ef|grep java来检查有多less个java进程正在运行,并用jps命令检查你的JVM。 您会看到,对于每个Java进程标识,您都有一个线程作为jps输出。