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

ban*_*nie 8 java jvm

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

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

PS:我用Google搜索并得到了很多不同的答案,我完全糊涂了.任何可以帮助我解决这类问题甚至更深入的Java虚拟机的人.例如,它是如何工作的.

Bri*_*new 7

JVM是一个标准流程,就像其他任何流程一样.因此,两者之间没有隐含的沟通或国家共享.每个都有自己的堆,线程等.如果你杀了一个它不会影响另一个.

什么得到共享是JVM本身的代码页.内核足够智能,可以识别运行两次的相同二进制文件(任何二进制文件 - 不仅仅是JVM)并重用映像.这仅适用于实际的二进制代码 - 而不是其状态.有关详细信息,请参阅此处.Linux操作系统.

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