在Sedgewick的算法书4第201页中,aNode占用的内存被指定为40字节:

class Node{
    Item item;
    Node next;
}

给出的细目如下:
对象开销=16字节
项目引用=8字节(=内存地址)
下一个引用=8字节
额外开销=8字节
额外开销的原因是:
嵌套的非静态(内部)类作为节点类(第142页)需要额外的8字节(用于引用封闭实例)
他提到的这个封闭的实例是什么Node类只包含itemnext变量。
有人能澄清一下吗?

最佳答案

它说Node是一个非静态的内部类。如果该类是静态的内部类,则它可以在没有封闭类的情况下存在。因为它不是静态的,所以它依赖于定义它的外部类的实例。
所以如果我有一个类Bar和一个静态内部类Foo

public class Bar {
    private class Foo {
    }
}

为了使用Foo,我必须有一个封闭的Bar,例如。
Foo foo= new Bar().new Foo();

如果Foo是静态的,我可以
Foo foo= new Bar.Foo(); //i.e. new Bar.Foo()

因此,对于Bar的封闭实例,您需要额外的8个字节。

10-06 05:14
查看更多