|
Hot-Spot-Optimierung
|
Dynamischer
Compiler
- Kombination der besten Eigenschaften von
JIT Compiler und Interpreter
- Der Bytecode wir immer zuerst in der JVM
interpretiert
- Falls der kompilierter Code nach der
Optimierung einen Fehleraufweist, kann dies wieder interpretiert
werden
Profiler
- Während eine Funktion abläuft
sammelt der Profiler Trackingsinformationen über ihre Performance
(Laufzeit)
- Er wählt dann eine Methode nach
einer bestimmten Heuristik zum Kompilieren
- Kompilierte Methoden werden im
Cache des nativen Maschienencode gespeichert
- Beim Aufruf wird nachgeguckt, ob
die native Version der Methode im Cache liegt, sonst wird
Interpretiert
|
Der Java HotSpot Client VM und Java HotSpot
Server VM nutzen verschiedene Compiler, die aber eine Schnittstelle zur der
selben Virtual Machine haben. D.h. die selben GC-Routine, Interpreter, Thread
Synchronisierug u.s.w
|
Client
Compiler
- Die Ausführung von kurzlebigeren,
interaktiven GUI-Applikationen
- Verbesserte Laufzeit Performance
für Applikationen und Applets (Statuptime)
- Weniger Optimierungen =>weniger
Zeit für die Analyse => weniger Compilezeit
Der Compiler der Client-Version ist
auf einen interaktiven Einsatz optimiert, d.h., dass die Übersetzungszeit
möglichst kurz gehalten wird - auf der anderen Seite ist der
erzeugte Code in der Ausführung ineffizienter als der des
Server-Compilers.
Server Compiler
- Besser Optimierungsalgorithmen
Der optimierende Compiler der HotSpot
Server VM arbeitet mit klassischen Compileralgorithmen, u.a.
Register-Allokation durch graph coloring, CSE durch global value
numbering sowie inline caches - der Einsatz von polymorphic inline
caches hat sich jedoch nicht bewährt, daher werden polymorphe
Aufrufstellen durch vtables implementiert.
|
Garbage
Collection
Generational Copying
Aufteilung des Speichers in verschiedene
Bereiche:
- "Kinderhort" für die vor
kurzem erzeugte Objekte
- 95% aller Objekte sind kurzlebig
=>
- hohe Scannfrequenz
- Nach einer bestimmten Zeit werden die
"überlebenden" Objekte in einen anderen Speicherbereich
verschoben, der nicht mehr so oft gescannt wird.
- Je länger die Objekte existieren desto
kleiner ist die Scannfrequenz
Mark-Kompakt "Old
Object" Collector
wird im Bereich für Langlebige Objekte
angewendet.
- Phase: Markieren aller erreichbaren
Objekte
- Phase: Verschieben der Objekte, um die
Speicherlücken (Defragmentierung) zu beseitigen
Inlining
frequently-called Methods An
statt eine Methode jedes mal aufzurufen, wird ihr Quellcode einkopiert.
|