在互联网上有很多文章试图通过实证估算特定JVM实现中java.lang.Object
的开销。例如,我看到在某些JVM中,一个裸的Object
的大小开销被估计为8个字节。
我想知道的是,extends
关系的典型JVM实现是否在类继承层次结构的每个级别都会引入增量大小开销。换句话说,假设您有一个包含N级子类的类层次结构。那么类实例的内存表示的开销是O(1)还是O(N)?
我认为是O(1),因为虽然作为Java Object
所需要的隐藏松软内容(vtable、类链)的一些大小随着继承层次结构的增长而增长,但它们是按类增长的,而不是按实例增长的,而JVM实现可以在每个Object
上附加一个常量大小的头,并存储指向这些实体的常量大小指针。
因此,理论上,任何Java对象直接附加到它的内存表示的开销对于继承深度N应该是O(1)。有人知道在实践中是否是真的吗?