java - 对象数组的内存分配

标签 java arrays memory

<分区>

在我的计算机科学类(class)中,我们了解到当您创建数组时,JVM 会根据数组的大小自动分配内存。例如,如果您创建一个大小为 10 的整数数组,JVM 会为该数组分配 10 * 32 位的数据。

我的问题是,当您创建大小不同的对象数组时,这个过程究竟是如何工作的?例如一个字符串对象。当您创建一个包含 10 个字符串的数组时,系统上是否实际为这些字符串保留了任何内存,或者因为它们只是指针,所以不需要内存分配?

最佳答案

由于 StringObject 类的扩展类,并且 Java 中的对象通过引用传递(并存储在变量中),因此字符串数组是一个对 String 对象的引用数组。所以,当你这样做的时候

String[] a = new String[10];

您正在创建一个引用数组,其中每个引用(不是它指向的对象)的大小都是已知的(32 位机器为 32 位,64 位机器为 64 位)。

更新: 正如 Jon Skeet 所说 in one of his answers实际引用的大小可能与 native 指针大小相同,但不能保证。

关于java - 对象数组的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20099771/

相关文章:

java - 在没有 xml 文件标签的情况下用 Java 打印 XML

java - 初学者 : Min Value in Array (Java)

memory - 使用内存存储时如何在重新启动之间维护状态 - Mahout

java - Spring HATEOAS 中的 Resource 是否取代了 DTO?

java - 在java编译器中标记行的问题

c - 在 C 的 char 数组中存储无符号整数的问题

C++ std::string* s;回收内存?

javascript - JS : Boolean Array vs Int8Array

java - Android多播 - 有时接收阻塞线程

objective-c - 从类方法分配/释放指向数组的指针