next up previous contents
Next: Zusammenfassung Up: Globale Analyseverfahren Previous: Escape Analysis   Inhalt

Diskussion

Globale Analysen ermöglichen gute Optimierungen, selbst wenn im analysierten Programm verstärkt das Mittel der Datenabstraktion angewendet wird. Gerade in Java werden Interfaces häufig nur von einer Klasse im System implementiert, da viele Standards in Form von Java-Interfaces beschrieben werden. Diese werden dann von verschiedenen Herstellern konkret implementiert, wobei aber üblicherweise in einer VM nur eine Implementierung zum Einsatz kommt. Z.B. wird in einer Instanz eines Java-Programms in der Regel lediglich eine Implementierung des JDBC3.4-Interfaces geladen werden, da eine Anwendung üblicherweise nur mit einer Datenbank kommuniziert. Durch eine globale Analyse der Klassenhierarchie kann der Optimierer beweisen, daß alle Aufrufe, die typstatisch an das JDBC-Interface gerichtet sind, die einzige Implementierung aufrufen müssen. Solange ein Interface von nur einer Klasse implementiert wird, entsteht durch diese zusätzliche Abstraktion also keine Verschlechterung der Performanz.

Allerdings muß bei allen globalen Analysen die Komplexität des gewählten Algorithmus wegen der Größe der Eingangsdaten besonders kritisch betrachtet werden. Ein Algorithmus der auf realen Daten mit quadratischer Komplexität arbeitet, kann hier als prinzipiell unbrauchbar eingestuft werden. Besonders bei der Verwendung eines dynamischen Compilers, wo sich die aufgewendete Übersetzungszeit amortisieren muß, kommen nur Algorithmen in Frage, die, zumindest in der Praxis, ein lineares Verhalten zeigen. Algorithmen, die eine kontextsensitive Datenflußanalyse ausführen scheiden daher aufgrund ihrer zu hohen Komplexität für globale Analysen aus [Grove et al., 1997].

Ein anderer Punkt, der im Zusammenhang von globalen Analysen und dem in Java praktizierten dynamischen Laden von Klassen auftritt, ist die Deoptimierung. Wird im o.g. Beispiel eine neue Subklasse von C in das System geladen, so muß die gemachte Annahme ,,keine Subklasse von C überschreibt m`` überprüft werden. Sollte sie nicht mehr gegeben sein, so muß eine Deoptimierung (siehe Abschnitt 3.3) von X::y stattfinden.


next up previous contents
Next: Zusammenfassung Up: Globale Analyseverfahren Previous: Escape Analysis   Inhalt

2001-02-28