java整数数组大小混淆

标签 java arrays memory-management

我有这个代码

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/

相关文章:

Java多客户端服务器应用程序-如何组织套接字

java - 定时器代码不起作用

arrays - kql - 如何从字符串数组中删除所有空字符串?

返回后的 C++ 内存释放

java - 一个变量可以在一条语句中递增多少次?

java - 如何启动并运行 Grid

java - 在 Java 二维数组中查找最小值和最大值

java - 如何将网络上的adb设备列表存储到php数组中

C 自由函数(不使用 malloc)

c++ - 在 C++ 中使用指针时的内存管理