如何在Java中为泛型对象数组分配内存?

如何在Java中为泛型对象数组分配内存?,java,generics,dynamic-memory-allocation,Java,Generics,Dynamic Memory Allocation,我有一个类节点,它有一个泛型类型的变量 class Node{ Object obj; } 如果我正在创建一个节点对象数组,将为该数组分配多少内存 Node[] arr = new Node[10]; 首先,在Java中实现泛型类型的正确方法是使用而不是简单地使用对象类 但是,为了回答您的问题,它将为每个对象分配4个字节,因此对于大小为10的数组,它将40个字节 Java不会将对象存储在数组本身中,相反,它会存储对对象的引用。对象本身将在构建对象时获得自己分配的内存块 为了完全理解参

我有一个类
节点
,它有一个泛型类型的变量

class Node{
    Object obj;
}
如果我正在创建一个节点对象数组,将为该数组分配多少内存

Node[] arr = new Node[10];

首先,在Java中实现泛型类型的正确方法是使用而不是简单地使用
对象

但是,为了回答您的问题,它将为每个对象分配
4个字节
,因此对于大小为
10
的数组,它将
40个字节

Java不会将对象存储在数组本身中,相反,它会存储对对象的引用。对象本身将在构建对象时获得自己分配的内存块

为了完全理解参考资料,我推荐答案,我在谷歌上搜索了1分钟。。。

  • 头对象的大小为12字节
  • 10个元素乘以4个字节(整数大小)
  • 4字节填充

因此数组的大小是12+10*4+4=56字节。

首先,这里没有涉及“泛型”。其次,Java中的类型
节点
对象
节点【】
,等等就是所谓的“引用类型”。
节点
对象
类型变量的值不是“对象”,而是“引用”,基本上是指向对象的指针。类型
节点[]
的值是对保存引用的数组对象的引用。在
新节点[10]
中,您正在创建一个包含10个引用(基本上是10个指针)的数组对象。所有指针都以
null
开头。所以它占用的空间是10个指针占用的空间,加上数组对象的对象元数据的空间。每个引用(指针)占用的空间可能因Java虚拟机实现而异,但通常32位为4字节,64位为8字节。
节点
类可能包含哪些字段是不相关的;数组不存储
节点
对象。

我读取了您附加的链接。仅当数组用于int类型值时,此选项才有效。但问题是泛型类型数组。4字节或8字节,取决于引用的大小。