Существуют различные статьи на межстранах, которые пытаются эмпирически оценить накладные расходы java.lang.Object
, в частности, реализаций JVM. Например, я видел накладные расходы на размер голой Object
оценивается в 8 байт в некоторых JVM.
То, что я хотел бы знать, заключается в том, представляет ли типичная реализация JVM отношения extends
инкрементный размер накладных расходов на каждом уровне иерархии классов. Другими словами, предположим, что у вас есть иерархия классов с N уровнями подклассов. Являются ли накладные расходы встроенным представлением экземпляра класса O (1) или O (N)?
Я полагаю, что это O (1), потому что, хотя размер некоторых скрытых пушистых вещей, которые вы должны быть Java Object
(vtable, цепочка классов), будет возрастать по мере роста иерархии наследования, класс, а не на экземпляр, а реализация JVM может хранить указатели постоянного размера для этих объектов в заголовке с постоянным размером, прикрепленном к каждому Object
.
Итак, теоретически, служебные данные, непосредственно связанные с представлением в памяти любого объекта Java, должны быть O (1) для глубины наследования N. Кто-нибудь знает, действительно ли это на практике?