执行多个Java应用程序时Java虚拟机将执行的操作

问题描述

JVM和其他任何进程一样,是一个标准过程。因此,两者之间没有隐式的通信或状态共享。每个都将拥有自己的堆,线程等。如果杀死一个,则不会影响另一个

什么 得到共享是JVM本身的代码页。内核足够智能,可以识别运行两次的相同二进制文件任何 二进制文件- 而不仅仅是JVM)并重用映像。这仅适用于实际的二进制代码- 不适用于其状态。

JVM不是守护进程,但是可以在系统启动时作为Windows服务或Unix / Linux进程(通过/etc/init.d脚本)启动。这是引导计算机时运行(说)用Java编写的Web服务的方式。

解决方法

通过阅读本文,我知道每个Java应用程序都将在特定的Java虚拟机实例中运行。因此,如果我执行以下命令(“
Java -jar test1.jar”,“ Java -jar
test2.jar”),我将在系统中获得两个进程。并且,如果每个命令都使用默认堆大小,例如256M。总内存成本为512M,对吗?还有其他问题:

  • Java虚拟机是一个守护进程,由系统启动吗?
  • 当我执行“ java -jar test1.jar”时,它将创建Java虚拟机的实例,然后执行主要功能。这是否意味着每个正在运行的Java应用程序都是Java虚拟机的子线程或进程?
  • 每个正在运行的Java应用程序是否都是单独的,其他应用程序无法从此正在运行的Java应用程序获取变量,方法,常量等?
  • 如果一个正在运行的Java应用程序崩溃了,会影响其他正在运行的Java应用程序吗?

PS:我在Google上搜索并得到许多不同的答案,我完全感到困惑。任何可以帮助我解决此类问题甚至更深入的Java虚拟机的人。例如,它如何工作。