任何人都可以告诉我在不同命令中发出以下命令时会创建多少个jvm实例。
- command 1: c:\java -Xms32m -Xmx512m -Xss254k AccountSalary
- command 2: d:\java -Xms32m -Xmx512m -Xss254k AccountSalary
- command 3: c:\java -Xms32m -Xmx512m -Xss254k AccountSalary
他们是否会使用save jvm heap size或者每个java进程使用不同的堆大小?
答案 0 :(得分:6)
每次运行java
命令时,都会创建一个新的JVM实例。 (并且每个JVM实例将是一个独特的进程。)
因此,在您的示例中,JVM实例的数量将为3。
JVM实例不共享堆。每个人都有自己的堆。通过创建多个堆,无法保存堆空间。 (实际上,您可能通过创建多个JVM来使用更多堆空间...与使用多线程在同一JVM中运行应用程序的3个实例相比。)
堆大小是独立的。它们由各个JVM的命令行选项决定......
对于大多数JVM, JVM实例之间共享的唯一内存是包含JVM代码和(可能)共享本机库的只读段。
历史上,有一些JVM可以在JVM之间共享已编译的Java代码。但是,它很复杂,而且(AFAIK)当前生成的JVM不支持这一点。
答案 1 :(得分:0)
每个进程都在自己的JVM中运行。和堆空间不共享 在JVM中。此外,在您的情况下,您有3个不同的过程。所以, 它们运行在自己的JVM中。