我有这个代码
int[] i = new int[127*1024];
正在工作
int[] i = new int[128*1024];
正在 throw
线程“main”中出现异常 java.lang.OutOfMemoryError:Java 堆空间
在内存.main(内存.java:123)
在 64 位 Windows 计算机 jdk 1.8 中使用以下命令运行此命令
java -Xms1M -Xmx1M内存
根据我的理解,java int 是 4 个字节(32 位),int[] 数组是一个对象。 在上述情况下,如果大小为 131.072 字节(128 * 1024)且堆空间为 1mb,则失败 谁能帮忙解释一下为什么内存不足?
最佳答案
在创建数组时为数组的每个元素分配空间。
所有元素都初始化为 0
。
int
值是 4
字节,因此该数组会导致分配 128 * 1024 * 4
字节,即 0.5 Mb。
您的数组不是该代码行堆上的唯一对象,这就是您的 JVM 爆炸的原因,即使您给了它 1 Mb 的内存。
您需要为 JVM 提供更多内存以避免此错误。
关于java整数数组大小混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46820534/