gpt4 book ai didi

java - Java中字节数组的内存使用

转载 作者:IT王子 更新时间:2023-10-28 23:32:32 25 4
gpt4 key购买 nike

对于启发式预计算表,我需要一个包含 1504935936 个条目的字节数组。这应该需要大约 1.5 GB 的内存。

public class Main{
public static void main(String[] args){
byte[] arr = new byte[1504935936];
}
}

如果我为程序提供 2 GB 的 RAM,为什么会出现“OutOfMemoryError: Java heap space”-异常

java -Xmx2048M Main

java -Xmx2153M Main

它有效。为什么需要这么多内存?

最佳答案

可能是因为 Java 堆正被您程序中的其他数据使用和碎片化。

该字节数组需要在 Java 堆空间中分配为一个连续的 1.5 GB 内存块。 (这不是 Java 语言规范所要求的,但 AFAIK 是所有当前 JVM 实现实际工作的方式。)您的一些堆空间正在被消耗,并且 - 可能更重要的是 - 被之前在您的程序中发生的其他内存分配碎片化分配那个大字节数组。 java -Xmx2153M Main 可能是您必须使整个堆有多大,以便在您进行分配时剩下连续的 1.5 GB 空间。

如果您将这个大数组分成 100 个大小为 1/100 的较小数组,它可能适合较小的堆,因为它对堆碎片不那么敏感。

关于java - Java中字节数组的内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24559839/

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