Zoeken…


Opmerkingen

Geschiedenis

De Symantec JIT-compiler was vanaf 1.1.5 beschikbaar in Sun Java, maar deze had problemen.

De Hotspot JIT-compiler is in 1.2.2 aan Sun Java toegevoegd als een plug-in. In Java 1.3 was JIT standaard ingeschakeld.

(Bron: Wanneer heeft Java een JIT-compiler gekregen?

Overzicht

voer hier de afbeeldingsbeschrijving in

De JIT-compiler (Just-In-Time) is een onderdeel van de Java ™ Runtime Environment dat de prestaties van Java-applicaties tijdens runtime verbetert.

  • Java-programma's bestaan uit klassen, die platformneutrale bytecodes bevatten die door een JVM op veel verschillende computerarchitecturen kunnen worden geïnterpreteerd.
  • Tijdens de uitvoering laadt de JVM de klassenbestanden, bepaalt de semantiek van elke individuele bytecode en voert de juiste berekening uit.

Het extra processor- en geheugengebruik tijdens de interpretatie betekent dat een Java-applicatie langzamer werkt dan een native applicatie.

De JIT-compiler helpt bij het verbeteren van de prestaties van Java-programma's door bytecodes te compileren in native machinecode tijdens runtime.

De JIT-compiler is standaard ingeschakeld en wordt geactiveerd wanneer een Java-methode wordt aangeroepen. De JIT-compiler compileert de bytecodes van die methode in native machinecode en compileert deze "just in time" om te worden uitgevoerd.

Wanneer een methode is gecompileerd, roept de JVM de gecompileerde code van die methode rechtstreeks op in plaats van deze te interpreteren. Theoretisch, als compilatie geen processortijd en geheugengebruik vereist, kan het compileren van elke methode mogelijk maken dat de snelheid van het Java-programma die van een native applicatie benadert.

JIT-compilatie vereist processortijd en geheugengebruik. Wanneer de JVM voor het eerst wordt gestart, worden duizenden methoden aangeroepen. Het compileren van al deze methoden kan de opstarttijd aanzienlijk beïnvloeden, zelfs als het programma uiteindelijk zeer goede piekprestaties bereikt.


  • In de praktijk worden methoden niet gecompileerd de eerste keer dat ze worden aangeroepen. Voor elke methode houdt de JVM een aantal call count dat wordt verhoogd telkens wanneer de methode wordt aangeroepen.
  • De JVM interpreteert een methode totdat het aantal oproepen een JIT-compilatiedrempel overschrijdt.
  • Daarom worden veelgebruikte methoden gecompileerd kort nadat de JVM is gestart en worden minder gebruikte methoden veel later of helemaal niet gecompileerd.
  • De JIT-compilatiedrempel helpt de JVM snel te starten en nog steeds betere prestaties te hebben.
  • De drempel is zorgvuldig gekozen om een optimale balans tussen opstarttijden en lange termijnprestaties te verkrijgen.
  • Nadat een methode is gecompileerd, wordt het aantal oproepen opnieuw op nul gezet en blijven de volgende oproepen bij de methode de telling verhogen.
  • Wanneer het aantal oproepen van een methode een JIT-hercompilatiedrempel bereikt, compileert de JIT-compiler deze voor de tweede keer, waarbij een grotere selectie optimalisaties wordt toegepast dan bij de vorige compilatie.
  • Dit proces wordt herhaald totdat het maximale optimalisatieniveau is bereikt.

De drukste methoden van een Java-programma worden altijd het meest agressief geoptimaliseerd, waardoor de prestaties van het gebruik van de JIT-compiler worden gemaximaliseerd.

De JIT-compiler kan ook operational data at run time meten en die gegevens gebruiken om de kwaliteit van verdere hercompilaties te verbeteren.

De JIT-compiler kan worden uitgeschakeld, in welk geval het hele Java-programma wordt geïnterpreteerd. Het uitschakelen van de JIT-compiler wordt niet aanbevolen, behalve voor het diagnosticeren of omzeilen van JIT-compilatieproblemen.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow