我有这段代码
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,则失败 任何人都可以帮忙解释为什么它的内存不足吗?
答案 0 :(得分:4)
在阵列创建时分配数组的每个元素的空间
所有元素都初始化为0
。
int
值为4
个字节,因此该数组会导致128 * 1024 * 4
个字节被分配,即0.5 Mb。
你的数组不是该代码行堆上唯一的对象,这就是你的JVM爆炸的原因,即使你给了它1 Mb的内存。
您需要为JVM提供更多内存以避免此错误。