原始包装器 带有泛型的内存空间开销,在 Java 中



我无法理解泛型的原始包装器开销。

前任。

在下面的数据结构中,为什么 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;            
}

最新更新