如果我们在一台机器上运行多个java程序,有人可以告诉我为什么会创建多个实例吗?为什么不能所有程序共享一个jvm并且java库是否会单独加载到所有jvm实例?
答案 0 :(得分:1)
理论上,一个jvm可以是多个java应用程序的主机,但实际上可能存在很多干扰。
基于文档:
JVM有一组System.in/out/err,一个默认编码,一个默认语言环境,一组系统属性,依此类推。如果一个应用程序更改了这些应用程序,则会影 任何调用System.exit()的应用程序都会杀死所有应用程序。 如果一个应用程序线程变得疯狂,并且消耗太多的CPU或内存,它也会影响其他应用程序。
答案 1 :(得分:1)
如果我们在一台机器上运行多个java程序,有人可以告诉我为什么会创建多个实例吗?
当您多次运行任何程序时,它会创建该程序的多个实例。这不是Java独有的。
为什么不能所有程序共享一个jvm
您的程序应共享一个JVM,但这意味着您应该只启动一个JVM并告诉它运行哪个应用程序。是否要这样做是另一个问题。剪切应用程序增加了复杂性,实际上趋势是将单个整体变成多个微服务
分裂而不是组合JVM的一些原因。
并且java库是否会单独加载到所有jvm实例?
JVM内存将JAR映射到内存中,它是操作系统,而不是JVM,后者决定是否或如何在进程之间共享JAR。
但是,每个需要类的JVM都会加载它并设置它的静态字段副本。
我的意思是说jvm如何在内存中加载公共库,因为如果两个jvm在内存中加载相同的类,那么在访问该类对象时可能会发生冲突
每个进程都有自己的内存空间。如果两个JVM加载相同的类,则这两个副本彼此之间没有交互,并且没有冲突的机会。
答案 2 :(得分:0)
因为如果有人杀死JVM,你不希望所有Java程序崩溃。 是的,Java库将单独加载。但Java程序告诉JVM哪些库要加载" import"关键字。