gpt4 book ai didi

java.lang.OutOfMemoryError - 有什么方法可以在不增加内存的情况下解决这个问题吗?

转载 作者:行者123 更新时间:2023-12-01 16:43:07 24 4
gpt4 key购买 nike

public static void main (String[]args) {

ArrayList<Integer> x= new ArrayList<Integer>();
for (int i=0;i<Integer.MAX_VALUE;i++) {
x.add(i);
}

}

为什么我的内存不足?有什么方法可以将大量值存储到列表中,例如从 Integer.Min_value 到 Integer.Max_value?

最佳答案

我假设您使用的是 64 位系统,因为 32 位系统无法寻址超过 4 GiB 的内存,这不足以满足您的目的。

Integer.MAX_VALUE 为 2^31 - 1,即大约 20 亿。 Integer 对象使用 24 bytes内存,并且具有 20 亿个元素的 ArrayList 必须在至少一个长度为 20 亿的数组中存储对这些元素的引用;每个引用占用8个字节。

因此,您要使用的内存总量超过 20 亿乘以 24 字节,再加上 20 亿乘以 8 字节,即 64 GiB。如果您有 128 GiB 内存,并且出于某种原因决定让 Java 使用全部内存,那么理论上这是可能的。

但是不要这样做。您没有理由需要一个包含从 0 到 Integer.MAX_VALUE 的所有整数的 ArrayList,除非是为了赢得赌注。如果您需要循环从 0 到 Integer.MAX_VALUE 的整数,请使用像您编写的那样的 for 循环;它们不需要同时全部存储在内存中。

关于java.lang.OutOfMemoryError - 有什么方法可以在不增加内存的情况下解决这个问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58848834/

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