2014-09-17 4 views
8

Что такое использование памяти в Java при расширении базового класса.Использование памяти Java в наследовании

Имеет ли дочерний класс экземпляр базового класса (с его собственными накладными расходами и все) или у него есть только собственные накладные расходы на 16 байтов?

class Foo { 
int x; 
} 

class Bar extends Foo { 
int y; 
} 

Так, более конкретно, что такое использование памяти экземпляра Bar?

ли Foo (including overhead) + Bar(including overhead)

или просто Foo (excluding overhead + Bar(including overhead)

+0

Существует только один заголовок и только один объект. Поля Bar находятся сразу после полей из Foo в памяти. –

ответ

8

Там нет двойных накладных расходов.

Java возьмет класс, суперклассы, вычислит пространство, необходимое для всех полей, и выделит пространство, необходимое для одного экземпляра.

Создайте только точку памяти, вообще не существует понятия суперкласса, есть экземпляр Foo, который нуждается в памяти только для одного int, а экземпляры Bar нуждаются в памяти для двух ints, из которых один есть, потому что Бар, оказывается, расширяет Foo.

Так что накладные расходы (или ведение бухгалтерского учета или все, что вы хотите вызвать) происходит только один раз.

Однако при разработке в java обычно лучше не заботиться о материалах памяти слишком много, если у вас нет очень специфических (и я имею в виду очень очень специфических) случаев использования, при которых накладные расходы на книгу вызывают серьезные проблемы. В этом случае необходимо учитывать также 8-байтовое дополнение.

Как правило, есть много других способов улучшить объем памяти вашего приложения или его общую производительность, чем не беспокоиться об издержках памяти каждого отдельного экземпляра.

+0

Позволяет сказать, что я хочу использовать только часть класса - создание объекта всего класса занимает память. Если бы этот класс был разделен на часть суперкласса и подкласс, который позволил бы мне создать экземпляр только той части, которая мне нужна, что сделало бы мое приложение несколько более эффективным для памяти. Это верно? – Lealo

Смежные вопросы