java - Java 对象数组创建后的内存大小是多少?

标签 java arrays memory

这可能甚至不需要询问,但我想确保我在这一点上是正确的。当您在 Java 中创建任何对象的数组时,如下所示:

Object[] objArr = new Object[10];

变量objArr位于栈内存中,它指向堆中数组对象所在的位置。堆中该数组的大小等于 12 字节对象头 + 4(或 8,取决于引用大小)字节 * 数组中的条目数。这准确吗?

那么我的问题如下。由于上面的数组是空的,那么执行完该行代码后,它是否立即在堆中占用了 12 + 4*10 = 52 字节的内存?或者 JVM 是否会等到您开始将数据放入数组后才实例化它?数组中的空引用是否占用空间?

最佳答案

空引用确实“占用空间”——数组的内存预先分配在一个 block 中,并归零(以使所有内容为空引用)。作为练习,尝试分配一个巨大的数组,该数组将占用比 JVM 内存限制更多的空间。程序应立即终止并出现内存不足错误。

关于java - Java 对象数组创建后的内存大小是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31108523/

相关文章:

Java 8 函数调用

java - Brian Goetz 的不当出版

python - 索引和切片结构化 ndarrays

javascript - 如何使此功能按预期工作?

arrays - Metal 中的数组结构

ios - Get-only 属性保留在内存中

java - 在 swagger-ui docker 中更改试用网址

java - 如何在 hadoop 应用程序中覆盖 InputFormat 和 OutputFormat

javascript - 使用原型(prototype)创建带有方法的数组

c++ - 如何从 C++ 中的动态分配中恢复内存泄漏?