Vra

Wat doen 'n JIT-samesteller spesifiek in teenstelling met 'n nie-JIT-samesteller?Kan iemand 'n bondige en maklik verstaanbare beskrywing gee?

Was dit nuttig?

Oplossing

'n JIT samesteller loop na die program het begin en stel die kode (gewoonlik bytekode of 'n soort VM-instruksies) op die vlieg (of net-betyds, soos dit genoem word) saam in 'n vorm wat gewoonlik vinniger is, tipies die gasheer-SVE se inheemse instruksiestel.'n JIT het toegang tot dinamiese looptydinligting, terwyl 'n standaardsamesteller dit nie doen nie en beter optimaliserings kan maak soos inlynfunksies wat gereeld gebruik word.

Dit is in teenstelling met 'n tradisionele samesteller wat saamstel almal die kode na masjientaal voor die program word eers uitgevoer.

Om te parafraseer, konvensionele samestellers bou die hele program as 'n EXE-lêer VOOR die eerste keer dat jy dit hardloop.Vir nuwer stylprogramme word 'n samestelling met pseudokode (p-kode) gegenereer.Eers NADAT jy die program op die OS uitgevoer het (bv. deur te dubbelklik op sy ikoon) sal die (JIT) samesteller inskop en masjienkode (m-kode) genereer wat die Intel-gebaseerde verwerker of wat ook al sal verstaan.

Ander wenke

In die begin was 'n samesteller verantwoordelik om 'n hoëvlaktaal (gedefinieer as hoër vlak as samesteller) in objekkode (masjieninstruksies) om te skakel, wat dan (deur 'n skakelaar) in 'n uitvoerbare lêer gekoppel sou word.

Op 'n stadium in die evolusie van tale, sou samestellers 'n hoëvlaktaal in pseudo-kode saamstel, wat dan geïnterpreteer sou word (deur 'n tolk) om jou program te laat loop.Dit het die objekkode en uitvoerbare programme uitgeskakel, en het toegelaat dat hierdie tale na verskeie bedryfstelsels en hardewareplatforms oorgedra kan word.Pascal (wat saamgestel is na P-kode) was een van die eerstes;Java en C# is meer onlangse voorbeelde.Uiteindelik is die term P-kode vervang met greepkode, aangesien die meeste van die pseudo-bewerkings 'n greep lank is.

'n Just-In-Time (JIT) samesteller is 'n kenmerk van die looptyd tolk, wat in plaas daarvan om greepkode te interpreteer elke keer as 'n metode opgeroep word, die greepkode sal saamstel in die masjienkode-instruksies van die lopende masjien, en dan hierdie voorwerpkode plaas.Ideaal gesproke sal die doeltreffendheid van die uitvoer van objekkode die ondoeltreffendheid van die hersamestelling van die program oorkom elke keer as dit loop.

JIT-Just in time the word itself says when it's needed (on demand)

Tipiese scenario:

Die bronkode word heeltemal in masjienkode omgeskakel

JIT scenario:

Die bronkode sal omgeskakel word in samestellingstaal soos struktuur [byvoorbeeld IL (intermediêre taal) vir C#, ByteCode vir java].

Die intermediêre kode word slegs in masjientaal omgeskakel wanneer die toepassing benodig wat kodes slegs na masjienkode omgeskakel word.

JIT vs nie-JIT vergelyking:

  • dit verminder las op die SVE.

  • As the machine code will be generated on run time....the JIT compiler will produce machine code that is optimised for running machine's CPU architecture.

JIT voorbeelde:

  1. In Java is JIT in JVM (Java Virtual Machine)
  2. In C# is dit in CLR (Common Language Runtime)
  3. In Android is dit in DVM (Dalvik Virtual Machine), of ART (Android RunTime) in nuwer weergawes.

Soos ander genoem het

JIT staan ​​vir Just-in-Time wat beteken dat kode saamgestel word wanneer dit nodig is, nie voor runtime nie.

Net om 'n punt by die bespreking hierbo te voeg, hou JVM 'n telling in stand van hoeveel keer 'n funksie uitgevoer word.As hierdie telling 'n voorafbepaalde limiet oorskry, stel JIT die kode saam in masjientaal wat direk deur die verwerker uitgevoer kan word (anders as die normale geval waarin javac die kode saamstel in greepkode en dan java - die tolk interpreteer hierdie greepkode reël vir reël om masjienkode en voer uit).

Ook volgende keer as hierdie funksie bereken word, word dieselfde saamgestelde kode weer uitgevoer anders as normale interpretasie waarin die kode weer reël vir reël geïnterpreteer word.Dit maak uitvoering vinniger.

JIT samesteller stel slegs die byte-kode saam na ekwivalente inheemse kode by die eerste uitvoering.By elke opeenvolgende uitvoering gebruik die JVM bloot die reeds saamgestelde inheemse kode om werkverrigting te optimaliseer.

enter image description here

Sonder JIT-samesteller vertaal die JVM-tolk die greepkode reël-vir-reël om dit te laat lyk asof 'n inheemse toepassing uitgevoer word.

enter image description here

Bron

JIT staan ​​vir Just-in-Time wat beteken dat kode saamgestel word wanneer dit nodig is, nie voor runtime nie.

Dit is voordelig omdat die samesteller kode kan genereer wat vir jou spesifieke masjien geoptimaliseer is.'n Statiese samesteller, soos jou gemiddelde C-samesteller, sal al die kode saamstel na uitvoerbare kode op die ontwikkelaar se masjien.Die samesteller sal dus optimaliserings uitvoer op grond van sekere aannames.Dit kan stadiger saamstel en meer optimalisering doen omdat dit nie die uitvoering van die program vir die gebruiker vertraag nie.

Nadat die greepkode (wat argitektuurneutraal is) deur die Java-samesteller gegenereer is, sal die uitvoering deur die JVM (in Java) hanteer word.Die byte-kode sal deur die laaier in JVM gelaai word en dan word elke byte-instruksie geïnterpreteer.

Wanneer ons 'n metode verskeie kere moet aanroep, moet ons dieselfde kode baie keer interpreteer en dit kan meer tyd neem as wat nodig is.So ons het die JIT (net-betyds) samestellers.Wanneer die greep reeds in JVM gelaai word (sy looptyd), sal die hele kode saamgestel word eerder as geïnterpreteer word, en sodoende tyd bespaar.

JIT-samestellers werk slegs gedurende looptyd, so ons het geen binêre uitvoer nie.

Just In Time Compiler (JIT):
Dit stel die Java-greepkodes saam in masjieninstruksies van daardie spesifieke SVE.

Byvoorbeeld, as ons 'n lusverklaring in ons java-kode het:

while(i<10){
    // ...
    a=a+i;
    // ...
 }

Die bogenoemde luskode loop vir 10 keer as die waarde van i 0 is.

Dit is nie nodig om die greepkode weer en weer vir 10 keer saam te stel nie, aangesien dieselfde instruksie vir 10 keer gaan uitvoer.In daardie geval is dit nodig om daardie kode slegs een keer saam te stel en die waarde kan vir die vereiste aantal kere verander word.Dus, Just In Time (JIT) Compiler hou boek van sulke stellings en metodes (soos hierbo gesê) en stel sulke stukkies byte-kode saam in masjienkode vir beter werkverrigting.

Nog 'n soortgelyke voorbeeld is dat 'n soektog na 'n patroon met behulp van "Regular Expression" in 'n lys van stringe/sinne.

JIT Compiler stel nie al die kode saam na masjienkode nie.Dit stel kode saam wat 'n soortgelyke patroon tydens looptyd het.

Kyk hier Oracle-dokumentasie oor Verstaan ​​JIT om meer te lees.

Jy het kode wat in een of ander IL (intermediêre taal) saamgestel is.Wanneer jy jou program laat loop, verstaan ​​die rekenaar nie hierdie kode nie.Dit verstaan ​​net inheemse kode.Die JIT-samesteller stel dus jou IL in inheemse kode saam.Dit doen dit op metodevlak.

Ek weet dit is 'n ou draad, maar runtime-optimering is nog 'n belangrike deel van JIT-samestelling wat blykbaar nie hier bespreek word nie.Basies kan die JIT-samesteller die program monitor terwyl dit loop om maniere te bepaal om uitvoering te verbeter.Dan kan dit daardie veranderinge dadelik aanbring - tydens looptyd.Google JIT-optimalisering (javaworld het 'n mooi goeie artikel daaroor.)

Jit stands for just in time compiler jit is a program that turns java byte code into instruction that can be sent directly to the processor.

Deur die java net betyds samesteller (regtig 'n tweede samesteller) by die spesifieke stelselplatform te gebruik, voldoen die greepkode in spesifieke stelselkode, sodra die kode hersaamgestel is deur die jit complier, sal dit gewoonlik vinniger in die rekenaar werk.

Die net-betyds samesteller kom saam met die virtuele masjien en word opsioneel gebruik.Dit stel die greepkode saam in platformspesifieke uitvoerbare kode wat onmiddellik uitgevoer word.

'n Just-in-time samesteller (JIT) is 'n stuk sagteware wat 'n nie-uitvoerbare invoer ontvang en die toepaslike masjienkode terugstuur wat uitgevoer moet word.Byvoorbeeld:

Intermediate representation    JIT    Native machine code for the current CPU architecture

     Java bytecode            --->        machine code
     Javascript (run with V8) --->        machine code

Die gevolg hiervan is dat vir 'n sekere SVE-argitektuur die toepaslike JIT-samesteller geïnstalleer moet word.

Verskilsamesteller, tolk en JIT

Alhoewel daar uitsonderings in die algemeen kan wees wanneer ons bronkode in masjienkode wil omskep, kan ons gebruik:

  1. Samesteller:Neem bronkode en gee 'n uitvoerbare terug
  2. Tolk:Voer die program instruksie vir instruksie uit.Dit neem 'n uitvoerbare segment van die bronkode en verander daardie segment in masjieninstruksies.Hierdie proses word herhaal totdat alle bronkode in masjieninstruksies omskep en uitgevoer is.
  3. JIT:Baie verskillende implementerings van 'n JIT is moontlik, maar 'n JIT is gewoonlik 'n kombinasie van 'n samesteller en 'n tolk.Die JIT eerste beurt tussengangerdata (bv.Java-greepkode) wat dit via interpretasie in masjientaal ontvang.'n JIT kan dikwels aanvoel wanneer 'n sekere deel van die kode gereeld uitgevoer word en die sal hierdie deel saamstel vir vinniger uitvoering.

'n Nie-JIT samesteller neem bronkode en omskep dit in masjienspesifieke greepkode tydens samestelling.'n JIT-samesteller neem masjien-agnostiese grepe-kode wat tydens die samestellingstyd gegenereer is en omskep dit in masjienspesifieke greepkode tydens hardlooptyd.Die JIT-samesteller wat Java gebruik, is wat 'n enkele binêre opsie toelaat om sonder verandering op 'n menigte platforms te werk.

net-in-tyd (JIT) samestelling, (ook dinamiese vertaling of run-time samestelling), is 'n manier om rekenaarkode uit te voer daardie behels samestelling tydens uitvoering van 'n program – tydens looptyd – eerder as voor uitvoering.

IT samestelling is 'n kombinasie van die twee tradisionele benaderings tot vertaling na masjienkode – voortydige samestelling (AOT), en interpretasie – en kombineer 'n paar voordele en nadele van albei. JIT-samestelling kombineer die spoed van saamgestelde kode met die buigsaamheid van interpretasie.

Kom ons kyk na JIT wat in JVM gebruik word,

Byvoorbeeld, die HotSpot JVM JIT samestellers genereer dinamiese optimalisering.Met ander woorde, hulle neem optimaliseringsbesluite terwyl die Java-toepassing loop en genereer hoëpresterende inheemse masjieninstruksies gerig op die onderliggende stelselargitektuur.

Wanneer 'n metode vir samestelling gekies word, voer die JVM sy greepkode na die Just-In-Time samesteller (JIT).Die JIT moet die semantiek en sintaksis van die greepkode verstaan ​​voordat dit die metode korrek kan saamstel.Om die JIT-samesteller te help om die metode te ontleed, word sy greepkode eers herformuleer in 'n interne voorstelling genaamd spoorbome, wat meer na masjienkode as greepkode lyk.Ontleding en optimalisering word dan op die bome van die metode uitgevoer.Aan die einde word die bome in inheemse kode vertaal.

'n Spoorboom is 'n datastruktuur wat gebruik word in die looptydsamestelling van programmeringskode.Spoorbome word gebruik in 'n tipe 'net-betydse samesteller' wat kode naspeur wat tydens hotspots uitgevoer word en dit saamstel.Verwys hierdie.

Verwys:

20% van die greepkode word 80% van die tyd gebruik.Die JIT-samesteller kry hierdie statistieke en optimaliseer hierdie 20% van die greepkode om vinniger te loop deur inlynmetodes by te voeg, ongebruikte slotte te verwyder, ens. en ook die greepkode spesifiek vir daardie masjien te skep.Ek haal aan uit hierdie artikel, ek het gevind dat dit handig was. http://java.dzone.com/articles/just-time-compiler-jit-hotspot

JIT verwys na uitvoeringsenjin in min JVM-implementerings, een wat vinniger is maar meer geheue benodig, is 'n net-betyds samesteller.In hierdie skema word die grepe van 'n metode saamgestel na inheemse masjienkode die eerste keer dat die metode opgeroep word.Die inheemse masjienkode vir die metode word dan gekas, sodat dit hergebruik kan word die volgende keer dat dieselfde metode opgeroep word.

JVM voer eintlik samestellingstappe tydens looptyd uit om prestasieredes.Dit beteken dat Java nie 'n skoon samestelling-uitvoeringsskeiding het nie.Dit doen eers 'n sogenaamde statiese samestelling van Java-bronkode na greepkode.Dan word hierdie greepkode na die JVM oorgedra vir uitvoering.Maar die uitvoering van greepkode is stadig, so die JVM meet hoe gereeld die greepkode uitgevoer word en wanneer dit 'n "hotspot" van kode opspoor wat baie gereeld uitgevoer word, voer dit dinamiese samestelling uit van greepkode na masjienkode van die "hotspot"-kode (hotspot-profileerder).So effektief word Java-programme vandag deur masjienkode-uitvoering bestuur.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top