Table Of ContentSpringer
Berlin
Heidelberg
New York
Barcelona
Ho ngkong
London
Mailand
Paris
Tokio
Die Reihe Xpert.press des Springer-Verlags
vermittelt Professionals in den Bereichen
Betriebs- und Informationssysteme, Software
Engineering und Programmiersprachen aktuell
und kompetent relevantes Fachwissen über
Technologien und Produkte zur Entwicklung
und Anwendung moderner Informations
technologien.
Martin Trapp
Optimierung
objektorientierter
Programme
Übersetzungstechniken, Analysen
und Transformationen
Mit 29 Abbildungen
Springer
Dr. Martin Trapp
IBM TJ. Watson Research Center
Yorktown Heights, NY, USA
[email protected]
ISBN-13: 978-3-642-63999-9 e-ISBN-13: 978-3-642-59502-8
DOI: 10.1007/978-3-642-59502-8
Die Deutsche Bibliothek - CIP-Einheitsaufnahme
Trapp, Martin: Optimierung objektorientierter Programme: Übersetzungstechniken,
Analysen und TransformationenIMartin Trapp. - Berlin; Heidelberg; New York;
Barcelona; Hongkong; London; Mailand; Paris; Tokio: Springer, 2001
(Xpert.press)
ISBN-13: 978-3-642-63999-9
Zur Erlangung des akademischen Grades eines Doktors der Ingenieurwissenschaften
von der Fakultät flir Informatik der Universität Karlsruhe genehmigte Dissertation von
Martin Trapp aus Baden-Baden.
Tag der mündlichen Prüfung: 22.12.1999
Erster Gutachter: Prof. Dr. Gerhard Goos
Zweiter Gutachter: Prof. Dr. Theo Ungerer
Dieses Werk ist urheberrechtlich geschützt. Die dadurch begründeten Rechte, insbe
sondere die der Übersetzung, des Nachdrucks, des Vortrags, der Entnahme von Abbil
dungen und Tabellen, der Funksendung, der Mikroverfilmung oder der Vervielfälti
gung auf anderen Wegen und der Speicherung in Datenverarbeitungsanlagen, bleiben,
auch bei nur auszugs weiser Verwertung, vorbehalten. Eine Vervielfältigung dieses
Werkes oder von Teilen dieses Werkes ist auch im Einzelfall nur in den Grenzen der
gesetzlichen Bestimmungen des Urheberrechtsgesetzes der Bundesrepublik Deutsch
land vom 9. September 1965 in der jeweils geltenden Fassung zulässig. Sie ist grund
sätzlich vergütungspflichtig. Zuwiderhandlungen unterliegen den Strafbestimmungen
des Urheberrechtsgesetzes.
Springer-Verlag Berlin Heidelberg New York
ein Unternehmen der BertelsmannSpringer Science+Business Media GmbH
http://www.springer.de
© Springer-Verlag Berlin Heidelberg 2001
Reprint ofthe original edition 2001
Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in
diesem Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme,
dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als
frei zu betrachten wären und daher von jedermann benutzt werden dürften.
Umschlaggestaltung: KünkelLopka, Heidelberg
Satz: Reprofertige Vorlagen vom Autor
SPIN: 10844503 33/3142GF 543210
Vorwort
Meine ersten praktischen Erfahrungen mit der Objektorientierung machte ich En
de der 80er Jahre in einem System mit Bytecode Interpretierer, automatischer
Speicherbereinigung und Threads. Ich hatte damals zwar nicht die leiseste Ah
nung von objektorientiertem Programmieren, war aber von der Eleganz dieses
Ansatzes sehr beeindruckt. Fünf Jahre später hätte man ein solches System wohl
als Virtual Machine erfunden.
Objektorientierte Kapselung, Delegation, Polymorphie und autonome Kompo
nenten können sehr hilfreiche Konzepte zur Strukturierung komplexer Software
Systeme sein. Objektorientiertc Programmimsprachcn unterstützen entsprechen
de Mechanismen, aber Systeme werden nicht automatisch objektorientiert, nur
weil sic in einer objektorientierten Programmiersprache implementiert werden:
C-Programmierer können auch in Java prima C-Programme schreiben, und um
gekehrt kann man mit etwas Disziplin auch in C recht objektorientiert program
mieren. Aus diesem Grund heißt dieses Buch auch nicht "Optimierungen für ob
jektorientierte Programmiersprachen", sondern "Optimierung objektorientierter
Programme" .
Was macht also nun ein objektorientiertes Programm aus, und warum sind nicht
bereits alle Fragen der optimierenden Übersetzung durch die bekannten Arbei
ten über Fortran beantwortet? Typisch für gute objektorientierte Programme
ist m.E. die zielgerichtete Verwendung VOll Abstraktionsmechanismen, um da
durch software-technische Ziele wie Verständlichkeit, Wartbarkeit, Robustheit,
kurze Implementierungszeiten und einfache Testbarkeit zu erreichen. Diese Ab
straktionsmechanismen sind im allgemeinen aber nicht umsonst zu bekommen.
Meist verbergen sie Implementierungsdetails nicht nur vor dem Programmierer,
sondern sehr häufig auch vor traditionellen, lokalen Programmoptimierungen.
Dei der zielgerichteten Verwendung objektorientierter Techniken scheiden sich oft
die Geister: Der sicherste Weg zur Vermeidung von Effizienzeinbußen, die durch
objektorientierte Abstraktionslllechanismcn entstehell können, ist die völlige Ver
meidung dieser l\lechanismen. Damit gehen natürlich aber auch die software
technischen Vorteile des objcktorienticrten Ansatzes wrloren.
Ob eine objektorientierte Abstraktion in einer bestimmten Programmzeile hilf
reich, unnötig oder einfach nur teuer ist, häugt ill der Regel VOll der konkreten
Verwendung in einem größerell Kontext ab. Selbst innerhalb desselben Programms
kann die Beantwortung dieser Frage für verschiedene Verwendullgen oft unter
schiedlich ausfallen. Die Entscheidullg über die Spezialisierung oder Elimination
von objektorientierten M(~challismen sollte daher auch llicht auf der Quelleodeebe
ne gefällt werden, sondern eir18Hl optimierenden Übersetzer für objektorientierte
Programme überlassen werdell. der dafür geeignete Technikell besitzt.
vi Vorwort
Beim Schreiben dieses Buches war es mir wichtig, die einzelnen Probleme und
Techniken nicht zusammenhangslos abzuhandeln, sondern immer auch die zu
grundeliegenden Ursachen und die wechselseitigen Beziehungen deutlich hervor
zuheben. Die hier vorgestellten Verfahren wurden ursprünglich für statische Über
setzer entwickelt. Inzwischen werden sie auch bei der dynamischen Übersetzung
mit Erfolg angewandt.
Die in diesem Buch beschriebenen neuen Ansätze, Techniken und Mechanismen
zur Optimierung objektorientierter Programme sind Ergebnisse meiner Tätigkeit
als wissenschaftlicher Mitarbeiter am Lehrstuhl von Professor Goos an der Univer
sität Karlsruhe. Derzeit führe ich meine Arbeiten am IBM T.J. Watson Research
Center, Yorktown Heights fort, wo wir mit Jalapeiio ein System zur adaptiven
Optimierung für Java entwickeln.
Ich möchte mich an dieser Stelle herzlichst bei allen bedanken, die mich in meiner
Arbeit unterstützt haben, insbesondere aber auch bei jenen, die mich in dieser
Zeit mit Nachsicht ertrugen.
White Plains, New York, im August 2001 Martin Trapp
Inhalt
1 Einleitung 1
2 Anforderungsanalyse 7
2.1 Ineffizienzen objektorientierter Programme. 7
2.1.1 Ineffizienzen durch Abstraktion 8
2.1.2 Ineffizienzen durch anwendungsunabhängigen Entwurf 12
2.1.3 Ineffizienzen durch hohe Kontextabhängigkeit 13
2.2 Benötigte Optimierungen 14
2.2.1 Traditionelle Optimierungen . 14
2.2.2 Elimination unnötiger Abstraktionen. 15
2.2.3 Spezialisierung des anwendungs unabhängigen Entwurfs 17
2.2.4 Reduktion der Kontextabhängigkeit 17
2.3 Benötigte Programminformationen 18
2.3.1 Definitionen und Benutzungen 18
2.3.2 Partielle Ordnung und Abhängigkeiten . 20
2.4 Approximation von Programminformationen . 22
2.4.1 Numerische Werte 22
2.4.2 Variablen 23
2.4.3 N amensschernata 23
2.4.4 Aliasproblematik 24
2.4.5 Schwache Aktualisierung . 25
2.4.6 Essentielle Abhängigkeiten 26
2.5 Beziehungen zwischen Programminformatiünen 26
2.6 Zusammenfassung 28
3 Stand von Forschung und Technik 31
3.1 Optimierungen 31
3.1.1 Optimierungsstrategien 31
3.1.2 Traditionelle Optimierungen . 32
3.1.3 Elimination unnötiger Abstraktionen. 34
3.1.4 Spezialisierung des anwendungsunabhängigen Entwurfs 36
3.1.5 Reduktion der Kontextabhängigkeit 37
3.2 Programmanalyse . 38
3.2.1 Datenflußanalyse 39
3.2.2 Steuerflußanalyse, Typanalyse . 41
3.2.3 Zeigeranalyse. Haldenanalyse 43
3.2.4 Genauigkeit und Aufwand 45
3.3 Programmrepräsentatioll . 47
3.3.1 Grundblockgraph . 47
3.3.2 Statie: Single Assignment Darstellungen 49
3.3.3 Ausgedünntc Repräsentationen 55
3.3.4 Ausnahme behandl ung 56
3.3.5 Abstraktiünsniveau . 58
3.4 Offene Probleme 59
viii Inhalt
4 Explizite Abhängigkeitsgraphen 61
4.1 Darzustellende Informationen ......... . 62
4.1.1 Operationen, Steuerf luß und Datenfluß . 62
4.1.2 Speicherabbildung ........... . 63
4.1.3 Ausnahmen ............... . 63
4.1.4 Typinformationen und statisch initialisierte Daten 64
4.2 Syntax und Semantik expliziter Abhängigkeitsgraphen 65
4.2.1 Operationen und Abhängigkeiten 67
4.2.2 Speicherabhängigkeiten 74
4.2.3 Zugriffsfunktionen 81
4.2.4 Ausnahmen....... 83
4.2.5 Typinformationen ... 86
4.3 Aufbau aus der semantischen Analyse 87
4.3.1 Hilfsstrukturen . . . . . . . . . 88
4.3.2 Bestimmung von Abhängigkeiten 89
4.3.3 Vermeidung unnötiger Phi-Operationen 90
4.3.4 Minimalität... 92
4.3.5 Aufwand ................ . 93
4.4 Abbau der Darstellung ............. . 94
4.4.1 Transformation komplexer Operationen 94
4.4.2 Abbildung von Datenflußkanten . 94
4.4.3 Auflösung von Phi-Operationen 95
4.5 Zusammenfassung ........... . 95
5 Programmanalyse über expliziten Abhängigkeitsgraphen 97
5.1 Analyse von Werten und Abhängigkeiten ....... . 97
5.1.1 Abstrakte Bereiche ................ . 97
5.1.2 Analyse von Variableninhalten und Ausdrücken. 99
5.1.3 Bestimmung von Definitionen und Benutzungen 102
5.2 Beschleunigung der Konvergenz .... . 102
5.2.1 Besuchsreihenfolge ....... . 103
5.2.2 Analyse über dem Schleifenbaum 106
5.3 Reduktion des Speicherbedarfs .. 108
5.3.1 Einsparungspotentiale ..... . 108
5.3.2 Bedarfsgesteuerte Analyse ... . 110
5.3.3 Zusammenfassen von Operationen zu Gebieten 112
5.4 Modellierung kontextsensitiver Werte mit x-Termen . 114
5.4.1 Symbolische Darstellung kontextsensitiver Werte 116
x-
5.4.2 Terme als Entscheidungsdiagramme ..... . 120
5.4.3 Kontextsensitive Transferfunktionen über x-Termen 123
5.4.4 Erzwingen einer geeigneten Variablenordnung . 124
5.5 Zusammenfassung ...................... . 125
Inhalt ix
6 Optimierung expliziter Abhängigkeitsgraphen 127
6.1 ilansformationen als Graphersetwng 128
6.1.1 Ersetzungsregeln . . . . . . . . . . . 129
6.1.2 Gesteuerte Ersetwng ....... . 130
6.1.3 Effiziente Erhaltung von Identitäten 130
6.1.4 Normalisierung............ 132
6.2 iladitionelle Optimierungen . . . . . . . . . 132
6.2.1 Konstantenfaltung und partielle Auswertung 132
6.2.2 Beseitigung von Kopien und totem Code ... 134
6.2.3 Globale Vermeidung redundanter Berechnungen. 135
6.3 Beseitigung objektorientierter Ineffizienzen. . . . . . . . 139
6.3.1 Reduktion VOll Polymorphie und Prozeduraufrufen 139
6.3.2 Reduktion von Speicherzugriffen ...... . 140
6.3.3 Elimination dynamischer Objekterzeugungen 143
6.4 Reduktion nicht essentieller Abhängigkeiten . . . . . 144
6.4.1 Verfeinerung des Namensschemas ...... . 145
6.4.2 Pfadverkürzung durch lokale Transfonnation 146
6.4.3 Globale Bestilllmung essentieller Abhängigkeiten 147
6.5 Iterative optimierende Üben;etzung 150
6.6 Zusammenfassung ....... . 154
7 Praktische Ergebnisse 155
7.1 Der Sather-K Übersetzer. 155
7.2 Testprogramme ..... . 157
7.3 l'vIessungen ....... . 159
7.4 Speichereffizienz VOll x-Termen 163
7.5 Vergleich Z1l anderen Übersetzern 166
7.6 Diskussion ............ . 166
8 Zusammenfassung 169
Literatur 171
A Entscheidungsdiagramme 177
A.1 Geordnete, binäre Entscheidungsdiagramrne 177
A.2 Größe von OBDDs . . . . . . . . . 178
A.3 Symbolisches Rechnen auf OBDDs . . . . . 178
A.4 Effiziente Implementierung ........ . 179
A.5 Andere Typen von Entscheidungsdiagranunen . 180
B Beispielprogramme 181
Sachverzeichnis 185
1
Einleitung
Dieses Buch stellt neuartige Ansätze für die optimierende Übersetzung objekt
orientierter Programme vor. Schwerpunkte bilden hierbei praxistaugliche Reali
sierungen für geeignete Programmrepräsentationen, effiziente Programmanalysen
und optimierende Transformationen sowie die Integration dieser Mechanismen in
einen optimierenden Übersetzer.
Objektorientierung ist eine wesentliche Schlüsseltechnologie für ein weites Feld von
Anwendungen. Beispielsweise nutzen Banken und Versicherungen, aber auch In
ternetdienste und Anwendungen im lmsiness-to-b'Usiness Bereich diese Technolo
gie in immer stärkerem Umfang. Der objektorientierte Ansatz zeigt vor allem dann
seine Stärken, wenn es darum geht, große Systeme zuverlässig zu entwerfen und
zu realisieren. Die Vorteile liegen insbesondere in der Kapselung VOll Zuständig
keiten, was wiederum kürzere Entwicklung-, Implementierungs- und Testzeiten
sowie eine bessere Verständlichkeit, Flexibilität und Wartbarkeit der Systeme zur
Folge hat. Durch all diese Verbesserungen tragen objektorientierte Technologi
en ganz wesentlich zur Steigerung der Produktivität und Qualität im Software
Entwicklungsprozeß bei.
Ein wesentliches Problem des objektorientierten Software-Entwurfs ist jedoch die
vergleichsweise geringe Effizienz der damit entwickelten Programme. Die ausführ
baren Programme sind sehr groß und haben im Vergleich zu nicht objektorientier
ten Programmen meist eine wesentlich höhere Laufzeit. Dieser Ullterschied in den
Ausführungszeiten beträgt nicht selten eine ganze Größenordnung, was in etwa
dem Faktor entspricht, um dell sich bislang die Prozessorleistung von Rechnern
in jeweils fünf Jahren erhöht hat.
Die Folge ist meist, daß die Vorteile, die die Objektorientierung bei der Software
Erstellung bietet, durch schwerwiegende Effizienzeinbußen b~;im ausführbaren Co
de erkauft werden müssen. In der Praxis führt dieser Gegensatz häufig dazu,
daß die Abstraktionsmöglichkeiten objektorientierter Programmierung ZII Glln
sten schnellerer Ausführungszeiten gemiedell werden.
Damit gehen aber auch viele der allgestrebtml Vorteik des objektorientierten An
satzes verloren: Durch Vermeidung von Polymorphie und Delegation sowie durch
das Aufweichen des Geheimnisprim~ips bei Klassen lassen sich natürlich einige
Ineffizienzen objektorientierter Programme bereits allf Ebene des Quelleodes be
seitigen. Allerdings sinkt dadurch auch die \Yiederverwendbarkeit und Flexibilität
der Programmkomponcnt.ell drastisch.
M. Trapp, Optimierung objektorientierter Programme
© Springer-Verlag Berlin Heidelberg 2001
Description:Objektorientierung ist eine der wesentlichen Techniken zur Realisierung von Softwaresystemen. Die unbestrittenen Vorteile dieses Ansatzes bei der Modellierung und Implementierung müssen jedoch häufig durch eine geringere Effizienz der so erstellten Programme erkauft werden. Dieses Buch vermittelt