我可以在 Win32 计算机上为 JVM 分配的最大堆大小是多少?

发布于 2024-08-19 05:06:02 字数 87 浏览 14 评论 0原文

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

I have BEA JRockit JDK 5.0 Update 6 running on Windows XP. I wish to know what is the max heap I can allocate when I have primary memory of 4GB on my machine.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

变身佩奇 2024-08-26 05:06:02

我没有 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 ");
            }
        }
}

I don't have JRockit but I should try some values of -Xmx option.
On my JVM the limit is 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.

I tested it with such program, so you can see how many memory you application can allocate from heap available to 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 ");
            }
        }
}
顾北清歌寒 2024-08-26 05:06:02

在此 SO 链接 中找到了答案

Got the answer in this SO link

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文