gpt4 book ai didi

当 VM 设置为最大 1024m 时出现 Java OutOfMemoryError

转载 作者:行者123 更新时间:2023-12-02 00:10:10 26 4
gpt4 key购买 nike

一个包含 1 亿个整数的 int 数组应该有 400 MB,对吗?1 个 int = 4 个字节

因此,如果我使用 -Xmx1024m 将虚拟机的最大堆设置为 1024m,为什么此代码会失败:

public static void main(String[] args) {

int[] b = new int[100000000]; //100 mil = 400mb
System.out.println("ok");
int[] c = new int[100000000];

}

这是输出:

ok
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at Main.main(Main.java:9)

解决方案 - 分解它!

public static void main(String[] args) {

int[] a = new int[50000000]; //50 mil = 200mb
System.out.println("ok 1");
int[] b = new int[50000000];
System.out.println("ok 2");
int[] c = new int[50000000];
System.out.println("ok 3");
int[] d = new int[50000000];
System.out.println("ok 4");


}

最佳答案

问题在于,当你创建这个 int[] 时,它需要 400mb 的连续内存。基本上这意味着,您需要一 block 400MB 的内存来使用。由于堆碎片,它找不到可用的 400mb 内存块。这就是您在这种情况下出现内存不足错误的原因。

关于当 VM 设置为最大 1024m 时出现 Java OutOfMemoryError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13022495/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com