【发布时间】:2017-10-18 23:07:59
【问题描述】:
我有这个代码
int[] i = new int[127*1024];
工作中
int[] i = new int[128*1024];
正在投掷
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at memory.main(memory.java:123)
在 64 位 Windows 机器 jdk 1.8 中使用以下命令运行它
java -Xms1M -Xmx1M memory
据我了解,java int 是 4 个字节(32 位),而 int[] 数组是一个对象。 在上述情况下,如果大小为 131.072 字节(128 * 1024)且堆空间为 1mb,则失败 谁能帮忙解释一下它为什么会内存不足?
【问题讨论】:
-
对不起,您是否认为堆中没有其他内容占用任何空间?比如说,Java VM 的所有其他基础架构?
-
而且大小是128*1024*4字节(+几个字节的开销),所以是你说的4倍。
-
这个数组至少使用了 128*1024*4=524288 字节,剩下的 Java 空间不到 1/2Mb。 20 年来从未见过它这么小。
-
这算作 4 * 128 * 1024 ~512 字节...你的意思是额外的字节开销也占 512 字节来填充 1 mb?
标签: java arrays memory-management