当多个java程序在同一台机器上运行时

当多个java程序在同一台机器上运行时,java,jvm,Java,Jvm,每个java应用程序都将在特定的java虚拟机实例中运行。我真的对以下几个方面感到困惑,谷歌搜索更让我困惑。不同的网站上有不同的文章 如果我有一个用java编写的web服务,它将需要一个JVM实例来运行。那么JVM可以成为一个守护进程吗 如果是,当我们运行任何其他java应用程序时,它将使用这个JVM实例还是创建一个新实例 任何机器的主存储器都是恒定的。当我们同时启动n个java进程而不提供任何初始堆大小时,堆大小如何分布在进程之间 是否有任何进程可以管理n个JVM实例,还是由操作系统本身管理

每个java应用程序都将在特定的java虚拟机实例中运行。我真的对以下几个方面感到困惑,谷歌搜索更让我困惑。不同的网站上有不同的文章

  • 如果我有一个用java编写的web服务,它将需要一个JVM实例来运行。那么JVM可以成为一个守护进程吗

  • 如果是,当我们运行任何其他java应用程序时,它将使用这个JVM实例还是创建一个新实例

  • 任何机器的主存储器都是恒定的。当我们同时启动n个java进程而不提供任何初始堆大小时,堆大小如何分布在进程之间

  • 是否有任何进程可以管理n个JVM实例,还是由操作系统本身管理

  • 当GC期间发生停止世界时,其他JVM实例(我假设是不同的线程)是否受到影响

  • 将创建JVM的新实例
  • 与内存在所有其他进程之间共享的方式相同
  • 它由O/S管理
  • 其他实例不受影响
  • 如果您的实例必须协调它们的工作,您可以创建一个主实例来运行/停止其他实例

    您没有解释为什么需要多个JVM实例。也许,单个实例会更好

    1) 如果我有一个用java编写的web服务,它将需要一个JVM实例来运行。那么JVM可以成为守护进程吗

    是的,它可以。它是如何完成的取决于O/S和web服务器容器本身

    2) 如果是,当我们运行任何其他java应用程序时,它将使用这个JVM实例还是创建一个新实例

    不是。每个Java应用程序都使用一个独立的JVM

    每个JVM都是一个单独的进程,这意味着不存在堆栈、堆等的共享。(通常,唯一可以共享的东西是保存核心JVM和本机库代码的只读段……与正常进程共享代码段的方式相同。)

    3) 任何机器的主存储器都是恒定的。当我们同时启动n个java进程而不提供任何初始堆大小时,堆大小如何分布在进程之间

    如果不指定大小,决定堆的大小的机制取决于您使用的JVM/平台/版本,以及您使用的是“客户机”还是“服务器”模型(对于热点JVM)。启发式方法不考虑其他JVM的数量或大小

    参考:

    实际上,最好直接指定堆大小

    4) 是否有任何进程可以管理n个JVM实例,还是由操作系统本身管理

    都不是。JVM实例的数量取决于可以启动进程的各种事物的操作;e、 g.守护进程脚本、命令脚本、用户在命令行键入命令等等。最终,如果资源耗尽,操作系统可能会拒绝启动更多进程,但JVM与其他进程没有任何区别

    5) 当GC期间发生停止世界时,其他JVM实例(我假设是不同的线程)是否受到影响


    不是。JVM是独立的进程。它们不共享任何可变状态。垃圾收集在每个JVM上独立运行。

    您的第一点取决于容器的实现…+1,请在提问之前进行详细解释和研究。