Java   Implementierungsstrategien für die JVM  

... [ Seminar "Java und Werkzeuge für das Web" ]  ... [ Inhaltsverzeichnis ]  ... [ zurück ]  ... [ weiter ] ...
     

Hot-Spot-Optimierung


      

Hot Spot 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 

    

Hot Spot 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

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.

  1. Phase: Markieren aller erreichbaren Objekte
  2. 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.

 


index