2013-04-26 2 views
2

Я немного обеспокоен управления памятью, делает наличие Вложенный класс плохо, занимает больше памяти, когда экземпляр создается для главного класса, например:Вложенный класс занимает больше места в памяти?

Случай 1:

class A 
{ 
    class B 
    { 

    } 

    int main() 
    { 
     B b=new B(); 
    } 
} 

A a=new A() в другом файле, будет также содержать структуру класса B и экземпляр B

случай 2:

class A 
{ 
    int main() 
    { 
     B b=new B(); 
    } 
} 

class B 
{ 
    //something 
} 

В этом случае в другом файле будет иметь экземпляр, а в экземпляре B

Так, Случай 1 занимает больше памяти или мои мысли ошибочны? Если я ошибаюсь, пожалуйста, объясните мне, как это работает.

+0

О каком языке программирования вы говорите? Пожалуйста, отметьте вопрос соответствующим образом. –

+0

@MattBall Java. Для других языков другое? – jovanMeshkov

+0

Не переусердствуйте. Разница была бы тривиальной, если таковая была бы. – SJuan76

ответ

5

«Мы должны забыть о небольших эффективности, скажем, около 97% времени: преждевременная оптимизация есть корень всех зол» - Дональд Кнут

Первый: Нет, вложенные классы не являются универсально " Плохо." Как и в любом случае в программировании - есть время и место для них.

Во-вторых: Да, как вы указали, нестатический внутренний класс поддерживает неявную ссылку на свой внешний класс, поэтому, если экземпляр внутреннего класса сильно привязан, то внешний экземпляр также сильно ссылается. Это означает немного больше использования памяти. НО:

Третье (и самое главное): Ключевое слово «незначительное». Это соображение составляет одну из «небольших возможностей», о которых говорит Кнут. Не позволяйте незначительным проблемам с производительностью управлять архитектурой вашей программы. Сосредоточьтесь на написании четкой, читаемой программы с чистой, хорошо организованной архитектурой: во многих случаях использование вложенных классов может создать более четкую организацию - если ваш один из этих случаев, то используйте вложенный класс: компромисс между более четкой архитектурой и таким незначительным увеличением использования памяти - это тот, который вы хотите делать каждый раз. Если производительность становится проблемой по линии, вы сможете оптимизировать ее до тех пор, пока ваша общая архитектура будет твердой. Так что сосредоточьтесь на этой архитектуре.

(Кроме того, программирование намного увлекательнее:)

+0

Спасибо! Я только что прочитал о Преждевременной Оптимизации, я не знал, что это существует. – jovanMeshkov

+0

Рад, что я мог бы указать вам на это :) – drewmoore

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