Non v'è alcun doppia testa.
Java prenderà la classe, le superclassi, calcolerà lo spazio necessario per tutti i campi e assegnerà lo spazio necessario per una singola istanza.
Formare solo un punto di vista della memoria, non esiste affatto la nozione di superclasse, ci sono istanze di Foo che hanno bisogno di memoria per un solo int, e istanze di Bar che necessitano di memoria per due interi, di cui uno è lì perché Bar capita di estendere Foo.
Quindi il sovraccarico (o la contabilità o qualsiasi altra cosa si voglia chiamare) avviene solo una volta.
Tuttavia, quando si sviluppa in Java, di solito è meglio non preoccuparsi troppo della memoria, a meno che non si abbiano casi molto specifici (e intendo molto molto specifici) in cui l'overhead di bookkeping sta causando seri problemi. In tal caso, dovrebbe essere considerato anche il padding da 8 byte.
Di solito, ci sono molti altri modi per migliorare l'ingombro della memoria dell'applicazione o le sue prestazioni generali, piuttosto che preoccuparsi del sovraccarico di memoria di ogni singola istanza.
fonte
2014-09-17 12:55:17
C'è solo un'intestazione e un solo oggetto. I campi di Bar sono immediatamente dopo i campi di Foo in memoria. –