Quina diferència hi ha entre un compilador JVM i JIT (just compilador temporal) a Java?


Resposta 1:

JVM ("màquina virtual de Java") té dos significats:

  1. És un conjunt d'instruccions abstracte dissenyat per executar programes Java. Aquest conjunt d'instruccions defineix una màquina d'apil·lació desplegable relativament senzilla a la qual es compilen els programes d'origen Java; Aquestes instruccions s’emmagatzemen a fitxers “.class”. És un programa que s’executa en un ordinador real, que pot executar les instruccions abstractes de JVM. Tal JVM inclou un "intèrpret" per a les instruccions de JVM individuals, però també inclou tota la maquinària de suport necessària per donar suport a l'execució del codi Java, inclosa l'aritmètica, trucades de funcions, assignació d'emmagatzematge, recollida d'escombraries, programació de fils, carregadors de fitxers de classe, fitxers. I / O i un altre accés al sistema operatiu local segons sigui necessari per executar aplicacions Java complexes.

Les JVM més antigues van interpretar literalment les instruccions del JVM un a un en temps d'execució. És fàcil d’implementar i és per això que es va fer. Però, com qualsevol intèrpret, aquesta interpretació en temps d'execució produeix temps d'execució del programa que normalment són un ordre de magnitud més lent que el codi de màquina compilat natiu.

Un "compilador JIT" ("JITter") és una característica de la majoria de les JVM modernes que recopila fragments d'instruccions JVM al codi de màquina nativa com a fragments nous o trossos de codi JVM trobats anteriorment. Es podria fer servir un compilador de codi Java-a-natiu fora de línia (hi ha alguns que existeixen actualment) per fer-ho amb finalitats tradicionals de compilació per lots, però no és la manera com va anar el món Java.

Els JITters tenen un avantatge respecte als compiladors per lots: poden compilar codi que coincideixi amb el que succeeix en temps d'execució i, per tant, poden ajudar a optimitzar les propietats dinàmiques del codi Java, com ara el desviament dinàmic que es produeix en les trucades de mètode Java sobrecarregades. Tenen un desavantatge: no veuen el programa a gran escala i, generalment, no poden fer el que fan bé els compiladors de lots: les optimitzacions globals. El compromís, en la pràctica, significa que els programes Java que es compilen JIT funcionen prou bé, però no tan ràpid com els programes C o C ++ que es compilen amb mètodes tradicionals.


Resposta 2:

Just compilador de temps o JIT és un component integral de la màquina virtual de Java juntament amb el col·leccionista d'escombraries, que com el seu nom indica fa la compilació Just in time. És capaç de recopilar directament el codi Java al llenguatge de la màquina, la qual cosa pot millorar molt el rendiment de l’aplicació Java.

Per cert, no està garantit que codi es compilarà i quan. El JIT sol compilar codi calent a Hotspot JVM un cop la seva execució traspassi cert límit, per exemple, un mètode es convertirà en llenguatge de màquina si es diu més de 10K vegades, etc.

A continuació, es mostren dues diferències més entre JVM i JIT a la plataforma de programació Java:

1) La diferència principal entre JVM i JIT té un propòsit, l'objectiu principal de JVM és proporcionar independència de la plataforma mentre que l'objectiu de JIT és millorar el rendiment de JVM, mitjançant la compilació de més codi al llenguatge de màquines. Tingueu en compte que aquesta compilació també requereix temps, per la qual cosa no val la pena fer-ne la traducció de tot el codi al codi natiu. És per això que JIT recopila principalment codi utilitzat amb freqüència en codi natiu.

2) Una altra diferència entre JIT i JVM és que, JIT forma part de JVM. Un exemple de JIT és l’Horacle Hotspot JIT que ve amb Hotspot JVM. S’anomena hotpost perquè el seu compilador Just in time compila només codi calent a l’idioma nadiu, codi que executa el 90% del temps.

Hi ha configuració de llindar, si algun codi executa més que aquest llindar, serà elegible per a la compilació de temps. Per cert, Hotspot no és l'únic JVM que conté compiladors només a temps, hi ha altres JVM i, per exemple, el original JRockit d'Oracle.

3) Finalment, JVM és un concepte més antic que JIT. En realitat JIT va inventar per millorar el rendiment de JVM després d'anys de llançament inicial de Java, mentre que la màquina virtual Java formava part de la versió inicial de Java.

Tot això té diferència entre JVM i JIT a Java. Com he dit, JIT forma part de JVM i s'utilitza per millorar el rendiment de JVM mitjançant la compilació o traducció dinàmica de codis de bytes Java a codi de llenguatge de màquina nativa durant el temps d'execució.


Resposta 3:

La diferència principal són:

  • JVM és una màquina virtual Java mentre que la compilació JIT és Just In Time.JIT és el subconjunt de JVM que s'utilitza per millorar el rendiment de JVM.JVM s'utilitza per executar codi de byte de programes Java que fa que la plataforma Java sigui independent mentre que JIT compila actualment els bytes. Codi al llenguatge de la màquina. Per a un millor rendiment de JVM, JIT també emmagatzema aquest codi compilat.

gràcies i molts records

shujat khan

Dades de contacte: [email protected]