代码之家  ›  专栏  ›  技术社区  ›  Ravi Gupta

我可以为win32机器上的jvm分配的最大堆大小是多少?

  •  0
  • Ravi Gupta  · 技术社区  · 15 年前

    我有BEA Jrockit JDK 5.0 Update 6在Windows XP上运行。我想知道当我的机器上有4GB的主内存时,我可以分配的最大堆是什么。

    2 回复  |  直到 15 年前
        1
  •  0
  •   Michał Niklas    15 年前

    我没有Jrockit,但我应该尝试一些 -Xmx 选择权。 在我的JVM上,限制为1610 MB:

    c:\tmp>java -version
    java version "1.6.0_18"
    Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
    Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing)
    
    c:\tmp>java -Xmx1610m mem_test
    1552 MB Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
        at mem_test.main(mem_test.java:15)
    
    c:\tmp>java -Xmx1611m mem_test
    Error occurred during initialization of VM
    Could not reserve enough space for object heap
    Could not create the Java virtual machine.
    

    我用这样的程序对它进行了测试,这样您就可以看到应用程序可以从可用于JVM的堆中分配多少内存:

    import java.util.ArrayList;
    import java.io.*;
    
    class mem_test
    {
        public static void main(String[] args) 
            {
            ArrayList<byte[]> big_list = new ArrayList<byte[]>();
            int max = 0;
            int i = 0;
            while (true)
                {
                ++i;
                big_list.add(new byte[1024 * 1024]);
                max = i;
                if (i % 16 == 0)
                    System.out.print("\r" + i + " MB ");
                }
            }
    }
    
        2
  •  0
  •   Community CDub    8 年前

    答案就在这里 SO link

    推荐文章