有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么要创建多个jvm实例?

谁能告诉我,如果我们在一台机器上运行多个java程序,为什么会创建多个实例?为什么不能所有程序共享一个jvm,java库将分别加载到所有jvm实例


共 (3) 个答案

  1. # 1 楼答案

    Can anyone please tell me why multiple instances will be created if we run multiple java programs in a single machine?

    当您多次运行任何程序时,它会创建该程序的多个实例。这不是Java独有的

    Why can't all programs share a single jvm

    您的程序应该共享一个JVM,但是这意味着您应该只启动一个JVM,并告诉它要运行哪个应用程序。你是否想这样做是另一个问题。共享应用程序增加了复杂性,事实上,趋势是将单个单块变成多个微服务

    拆分而不是合并JVM的一些原因

    • 标准垃圾收集器的暂停时间随着所用堆的大小而增加。拆分应用程序将意味着更多、更小的暂停
    • 为简单的工作负载调整垃圾收集更容易。如果你有混合的工作量,一个可能需要一个大的年轻空间,另一个可能需要一个小的年轻空间。工作负载越复杂,JVM就越难调整
    • 如果应用程序中存在资源泄漏,修复此问题的唯一方法可能是重新启动JVM。如果每个应用程序都在自己的JVM中,则不需要停止其他应用程序
    • 您可能有代码可以关闭JVM(填满内存、使JVM崩溃或使其处于不可用状态)。多个JVM可以限制此类故障的影响
    • 强制您在关键组件之间进行清晰的分离,从而提高可维护性。这可以在一块巨石上完成,但需要门徒

    and will java libraries load separately to all jvm instances?

    JVM内存将JAR映射到内存中,然后由操作系统而不是JVM决定进程之间是否共享JAR或如何共享JAR

    然而,每个需要类的JVM都会加载它,并设置静态字段的副本

    i mean to say how does jvm loads common libraries in memory because if two jvm loads same classes in memory then there might be conflict while accessing that class object

    每个进程都有自己的内存空间。如果两个JVM加载同一个类,这两个副本彼此之间没有交互,也没有发生冲突的机会

  2. # 2 楼答案

    因为如果一个Java程序杀死JVM,你不希望所有的Java程序都崩溃。 是的,Java库将分别加载。但是Java程序用“import”关键字告诉JVM要加载哪些库

  3. # 3 楼答案

    理论上,一个jvm可以承载多个java应用程序,但在实际操作中可能会有很多干扰

    根据文件:

    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.