Java:内部类的大小

hqt*_*hqt 13 java inner-classes

我有这门课:

public class Stack {

   private class Node {
       String item;
       Node next;
   }
   // some other methods here

}
Run Code Online (Sandbox Code Playgroud)

在我的书中,作者说每个堆栈节点的大小是40个字节,包括:

16 bytes (object overhead)
8 bytes (inner class extra overhead)
8 bytes (references to string)
8 bytes (references to node)
----------------------------------------------
40 bytes per stack node
Run Code Online (Sandbox Code Playgroud)

据我所知,最后两件事指的是String和Node的引用大小.但我不知道object overheadinner class extra overhead对应的是什么.你能解释一下吗?

Pet*_*rey 6

对象开销

每个对象都有一个标题,通常长度为8-12个字节.每个对象也是8字节对齐的,你说它的长度约为16个字节.

内部阶级额外开销

由于您的内部类不是静态的,因此它具有对外部类的引用.

如果这是一个匿名内部类,您可能拥有任意数量的最终变量的副本(在匿名类代码中使用的任何变量)

8个字节(内部类额外开销)8个字节(对字符串的引用)8个字节(对节点的引用)

大多数JVM使用32位引用,因此大小为4个字节.即使是堆高达32 GB的64位JVM也可以使用32位引用.