如何在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字节,取决于引用的大小。