Es gibt keine zwei oben liegende.
Java nimmt die Klasse, die Oberklassen, berechnet den Platz, der für alle Felder benötigt wird, und reserviert den Platz, der für eine einzige Instanz benötigt wird.
Nur einen Speicherpunkt bilden, gibt es nicht den Begriff der Oberklasse überhaupt, es gibt Instanz von Foo, die Speicher für nur ein int benötigen, und Instanzen von Bar, die Speicher für zwei Eingänge benötigen, von denen eins ist da, weil Bar Foo erweitert.
Also der Overhead (oder Buchhaltung oder was auch immer Sie anrufen möchten) passiert nur einmal.
Allerdings, wenn Sie in Java entwickeln, ist es normalerweise besser, sich nicht zu sehr um Speicherkram zu kümmern, es sei denn, Sie haben sehr spezifische (und ich meine sehr sehr sehr spezifische) Anwendungsfälle, bei denen der Buchhaltungsaufwand Ihnen ernste Probleme bereitet. In diesem Fall sollte auch das 8-Byte-Padding berücksichtigt werden.
Normalerweise gibt es viele andere Möglichkeiten, wie Sie den Speicherbedarf Ihrer Anwendung oder die Gesamtleistung verbessern können, anstatt sich über den Speicheraufwand jeder einzelnen Instanz Gedanken zu machen.
Es gibt nur einen Header und nur ein Objekt. Die Felder von Bar sind unmittelbar nach den Feldern von Foo im Speicher. –