ВУЗ:
Составители:
Рубрика:
3.6.7. Производительность объектных программ
Гради Буч указывает на следующие причины, приводящие к сниже-
нию производительности программ из-за использования объектно-ори-
ентированных средств [2]:
Динамическое связывание методов.
Обеспечение полиморфного поведения объектов приводит к необ-
ходимости связывать методы, вызываемые программой (т.е. определять,
какой конкретно метод будет вызываться) не на этапе компиляции, а в
процессе исполнения программы, на что тратится дополнительное вре-
мя. При этом реально динамическое связывание требуется не более чем
для 20 % вызовов, но некоторые ООП-языки используют его постоянно.
Значительная глубина абстракции.
ООП-разработка часто приводит к созданию «многослойных» при-
ложений, где выполнение объектом требуемого действия сводится
к множеству обращений к объектам более низкого уровня. В таком при-
ложении происходит очень много вызовов методов и возвратов из мето-
дов, что, естественно, сказывается на производительности.
Наследование «размывает» код.
Код, относящийся к «оконечным» классам иерархии наследования
(которые обычно и используются программой непосредственно) – нахо-
дится не только в самих этих классах, но и в их классах-предках. Отно-
сящиеся к одному классу методы фактически описываются в разных
классах. Это приводит к двум неприятным моментам:
1. Снижается скорость трансляции, так как компоновщику прихо-
дится подгружать описания всех классов иерархии.
2. Снижается производительность программы в системе со странич-
ной памятью – поскольку методы одного класса физически находятся в
разных местах кода, далеко друг от друга, при работе фрагментов про-
граммы, активно обращающихся к унаследованным методам, система
вынуждена производить частые переключения страниц.
Инкапсуляция снижает скорость доступа к данным.
Запрет на прямой доступ к полям класса извне приводит к необхо-
димости создания и использования методов доступа. И написание,
и компиляция, и исполнение методов доступа сопряжено с дополни-
тельными расходами.
Динамическое создание и уничтожение объектов.
Динамически создаваемые объекты, как правило, размещаются
в куче, что менее эффективно, чем размещение их на стеке и, тем более,
статическое выделение памяти под них на этапе компиляции.
93
Страницы
- « первая
- ‹ предыдущая
- …
- 91
- 92
- 93
- 94
- 95
- …
- следующая ›
- последняя »
