我无法理解泛型的原始包装器开销。
前任。
在下面的数据结构中,为什么 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
}
因为Node
的类声明(虽然是内部类)在实例之间不可变。也就是说,GenericMysteryBox
的每个实例都包含一个Node
(在键入擦除后)具有一个Object
引用和两个Node
引用。
这与Node
被声明为非私有非内部类(忽略Node
的可见性)的行为完全相同。
考虑
class Node<Item> {
private Item item;
private Node next;
private Node prev;
}
public class GenericMysteryBox<Item> {
private Node<Item> first;
}