我无法理解泛型的原始包装开销。
离。
在下面的数据结构中,为什么不会为每个项目添加24字节开销,而是为N
输入添加一次。
以其他方式提问,为什么总体内存空间不是96N而不是24 + 72N或者为什么24次添加。
public class GenericMysteryBox<Item> { // 16(object overhead)
private Node first; // 8 (reference)
private class Node { // 16(object overhead)
// 8 (inner class overhead)
private Item item; // 8 (reference to Integer)
// 24(Integer)
private Node next; // 8 (reference)
private Node prev; // 8 (reference)
} // -------
// 24 + 72N ~ 72N
}
答案 0 :(得分:0)
因为Node
的类声明(虽然是内部类)在实例之间是不可变的。也就是说,GenericMysteryBox
的每个实例都包含一个Node
(type erasure之后)有一个Object
引用和两个Node
引用。
这与将Node
声明为非私有非内部类(忽略Node
的可见性)的行为完全相同。
考虑,
class Node<Item> {
private Item item;
private Node next;
private Node prev;
}
public class GenericMysteryBox<Item> {
private Node<Item> first;
}