4

I have created following class and ran on 15 terminals with command "java -Xms500m Class1".

I was expecting it to not allow me after 4 or 5 separate executions. I was expecting something like cannot create more JVMs but all programs are running. If each JVM creation requires 500Mb of initial heap memory (my RAM is 2GB) then the maximum limit of JVM creation should be four.

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;
   }
 }
}

Thanks, Amaresh

4

3 回答 3

4

-Xmx is the maximum heap size, -Xms is the initial heap size. See here for more information about setting the heap size correctly.

于 2012-05-18T06:55:24.483 回答
2

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

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

在 Linux 中,交换空间用作内存。在 Windows 中,用作内存的磁盘数量可以配置为System Properties->Advanced->Performance->Settings

于 2012-05-18T08:15:25.430 回答
1

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

您正在设置“最大”内存 - 但您的代码根本不使用太多内存。

你的操作系统可能也有虚拟内存,所以它会超过 2GB。

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

于 2012-05-18T06:56:43.953 回答