next up previous contents
Next: Class Hierarchy Analysis Up: Techniken zur Programmausführung Previous: Zusammenfassung   Inhalt


Globale Analyseverfahren

Alle bis hierher geschilderten Compiler-Optimierungen arbeiten nur im Kontext der aktuell compilierten Methode und -- im Falle der Methodenintegration - ihrer direkten Kinder. Es existieren aber auch Optimierungen, die mit den auf dieser Ebene gewonnenen Informationen nicht ausgeführt werden können.

Soll beispielsweise bestimmt werden, ob ein dynamischer Methodenaufruf einer Methode m in der Klasse C in einen statischen Methodenaufruf umgewandelt werden kann, so müssen zur Analyse alle Subklassen von C herangezogen werden. Oder soll bestimmt werden, ob ein in der Methode m erzeugtes Objekt auf dem Stack alloziert werden kann, da seine Lebenszeit durch die Ausführung von m begrenzt ist, so müssen alle von m potentiell gerufenen Methoden analysiert werden.

Viele fortgeschrittene Optimierungen erfordern daher ein globales Wissen, d.h., sie sind auf die Kenntnis des gesamten Klassenbaums oder zumindest eines Teilbaumes angewiesen. Diese sogenannten ,,whole program optimizations`` werden üblicherweise als zu aufwendig erachtet und daher nicht eingesetzt. Besoders in der dynamischen Umgebung einer Java-Maschine, wo erst zur Laufzeit kompiliert wird und wo durch Laden neuer Klassen einmal gemachte Annahmen invalidiert werden können, scheint eine globale Analyse zu teuer zu sein. Da man sich hier jedoch ein großes Potential bei der Optimierung objektorientierte Programme verspricht, findet eine aktive Forschung zur Entwicklung effizienterer Algorithmen zur globalen Analyse statt.

Im den folgenden Abschnitten sollen 2 Arten globaler Analyseverfahren vorgestellt werden: class hierarchy analysis (Abschnitt 3.4.1) analysiert die Klassenhierarchie mit dem Ziel, dynamische durch statische Methodenaufrufe zu ersetzen. Die in Abschnitt 3.4.2 dargestellte escape analysis prüft, ob ein erzeugtes Objekt der erzeugenden Methode bzw. dem erzeugenden Thread ,,entfliehen`` kann. Ist dies nicht der Fall, so kann das ensprechende Objekt auf dem Stack alloziert werden bzw. dieses Objekt betreffende Synchronisationsoperationen können unterlassen werden.




next up previous contents
Next: Class Hierarchy Analysis Up: Techniken zur Programmausführung Previous: Zusammenfassung   Inhalt

2001-02-28