Next: On-Stack Replacement
Up: Techniken zur Programmausführung
Previous: Erhebung von Laufzeitprofilen
  Inhalt
Deoptimierung
Der dominante Anwendungsfall eines Algorithmus eignet sich häufig
besonders für Optimierungen. Dies ist unter Umständen mit höheren
Kosten für die selten ausgeführten Spezialfälle verbunden. Dieser
Ansatz lässt sich soweit verfolgen, daß ein Algorithmus allein für den
fast path übersetzt und optimiert wird. Um inkorrekte
Ergebnisse im Spezialfall zu verhindern, muß dieser erkannt werden und
die bereits angewandten Optimierungen rückgängig gemacht werden. Diese
Technik ist in mehreren Kontexten gebräuchlich:
- Fehlersuche: während durch Optimierungen wie constant
propagation Variablen ganz eliminiert werden können, muß im
Debugger die Änderung dieser Variable den erwarteten Effekt
auslösen; sie ist nicht mehr konstant.
- Methodenaufrufe: existiert zum Zeitpunkt der Übersetzung nur
eine Implementierung der gerufenen Methode im System, so kann diese
statisch gebunden oder integriert werden (siehe auch 3.4.1).
Wird zu einem späteren Zeitpunkt eine weitere Implementierung in das
System gebracht, so muß die aufrufende Methode deoptimiert werden.
- Ausnahmebehandlung: wie erläutert, behindert die Vielzahl von
möglichen ausnahmeauslösenden Operationen in Java in Verbindung mit
präziser Ausnahmebehandlung die Optimierung in erheblichem Maße.
Dieser Effekt läßt sich mildern, indem die entsprechenden
Kontrollflußkanten bei der Optimierung zunächst ignoriert werden. Im
-- per definitionem seltenen -- Ausnahmefall müssen die
Optimierungen unter Umständen kompensiert werden, um die präzise
Exception-Definition zu erfüllen.
Zwei Techniken im Zusammenhang mit Deoptimierung seien im folgenden
dargestellt: on-stack replacement und Optimierung der
Ausnahmebehandlung.
Next: On-Stack Replacement
Up: Techniken zur Programmausführung
Previous: Erhebung von Laufzeitprofilen
  Inhalt
2001-02-28