我创建了以下类,并使用命令“java -Xms500m Class1”在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
答案 0 :(得分:4)
-Xmx
是最大堆大小,-Xms
是初始堆大小。有关正确设置堆大小的详细信息,请参阅here。
答案 1 :(得分:2)
由于虚拟内存,您可以创建累积堆大小比物理内存大的JVM。
在Unix和Windows中,由于硬盘驱动器用作内存,因此可以创建4GB + sizeof(分配用作内存的硬盘驱动器空间)JVM。因此,如果您有4GB的RAM并且分配了2G的硬盘用作内存,则可以使用java -Xmx500 -Xms500创建12个JVM。
在Linux中,交换空间用作内存。
在Windows中,可以在System Properties->Advanced->Performance->Settings
答案 2 :(得分:1)
也可以尝试使用-Xms500m
。这将设置初始内存。
您正在设置“最大”内存 - 但您的代码根本不会占用太多内存。
您的操作系统可能还有虚拟内存,所以它会超过2GB。
另外,请记住500m
是堆大小。实际的JVM比单独的堆需要更多的内存。