Java 如何限制JVM的创建?

Java 如何限制JVM的创建?,java,jvm,heap-memory,Java,Jvm,Heap Memory,我创建了以下类,并使用命令“java-xms500mclas1”在15个终端上运行 我希望它在4到5次单独处决后不允许我这样做。我期待的是这样的东西:无法创建更多的JVM,但所有程序都在运行。如果每个JVM创建都需要500Mb的初始堆内存(我的RAM是2GB),那么JVM创建的最大限制应该是4 public class Class1 { public static void main(String[] args) { int i=0; while(true) { try

我创建了以下类,并使用命令“java-xms500mclas1”在15个终端上运行

我希望它在4到5次单独处决后不允许我这样做。我期待的是这样的东西:无法创建更多的JVM,但所有程序都在运行。如果每个JVM创建都需要500Mb的初始堆内存(我的RAM是2GB),那么JVM创建的最大限制应该是4

public class Class1
{
public static void main(String[] args)
{
  int i=0;
  while(true)
   {
    try
   {
    Thread.currentThread().sleep(100);
    System.out.println("hi-"+i);
   }
   catch (InterruptedException e)
   {
   }
   i++;
   if(i == 1000000)
   {
    break;
   }
 }
}
谢谢,
Amaresh

-Xmx
是最大堆大小,
-Xms
是初始堆大小。有关正确设置堆大小的更多信息,请参阅。

也可以尝试使用
-Xms500m
。这将设置初始内存

您设置了“最大”内存,但您的代码根本没有使用太多内存

您的操作系统可能也有虚拟内存,因此它将运行超过2GB


另外,请记住
500m
是堆大小。实际的JVM将占用比堆多一点的内存。

由于虚拟内存,您可以创建累积堆大小大于物理内存的JVM

在Unix和Windows中,由于硬盘驱动器用作内存,因此可以创建4GB+sizeof(分配用作内存的硬盘驱动器空间)JVM。因此,如果您有4GB的RAM,并且分配了2G的硬盘作为内存,那么您可以使用java-Xmx500-Xms500创建12个JVM

在Linux中,交换空间用作内存。
在windows中,可用作内存的磁盘数量可以在
系统属性->高级->性能->设置中配置

默认情况下,Xmx不强制使用500m,实际内存使用量取决于您的程序,可能会非常少。我错误地将命令编写为“java-Xmx500m Class1”在我最初的帖子中,我尝试使用-Xms500m本身。在阅读了上面的链接后,我尝试将最大和最小值都设置为500米,但我仍然能够创建几个JVM。正如其他人所说,它可能是虚拟内存。使用
top
或类似的工具来了解JVM的内存使用情况。@michael667:如何使用top?实际上,我尝试了使用-Xms,因此我希望为每个JVM分配500MB。在unix上,您可以在命令行上尝试
top
。在windows上,使用任务管理器。我尝试了“java-Xms500m Class1”和“java-Xms500m-Xmx500m Class1”。还有10多起类似的处决正在发生[acmourya@blr2230651~]$java-Xms 6000m Class1初始堆大小无效:-Xms无法创建java虚拟机。[acmourya@blr2230651~]$java-Xms18000m类hi-0 hi-1 hi-2 hi-3 hi-4 hi-5 hi-6 hi-7 hi-8 hi-9 hi-10 hi-11 hi-12 hi-13 hi-14 hi-15 hi-16 hi-17 hi-18