Implementarea mașinii virtuale Java

De regulă, arhitectura și setul de instrucțiuni al calculatorului, pe care se execută un program Java, diferă de cele ale mașinii virtuale Java. În consecință, codul de octeți generat de compilatorul Java nu poate fi executat nemijlocit de procesorul (procesoarele) calculatorului pe care acesta se execută.

Dacă este realizată software (așa cum se întamplă în majoritatea cazurilor), mașina virtuală Java este ea însăși un produs program, care este scris și compilat special pentru tipul de calculator pe care se instalează, deci folosește setul de instrucțiuni nativ al acestuia. Acest produs program trebuie să respecte specificația mașinii virtuale Java, dar realizarea concretă depinde de tipul de calculator pe care se instalează. Mai mult, pentru același calculator pot fi realizate mai multe mașini virtuale Java, care toate respecta  specificația, dar diferă între ele prin modul de realizare.

În principiu, componenta principală a mașinii virtuale Java este un interpretor, adică un program care parcurge instrucțiunile conținute în codul de octeți Java din memoria mașinii virtuale Java și le convertește în instrucțiuni native, care pot fi executate de procesorul calculatorului gazdă. Această conversie necesită un anumit timp, din care cauză durata de execuție a unui program interpretat este intotdeauna mai mare decât a unuia compilat direct în codul nativ. Din această cauză, principala deficiență care se semnala la primele implementări ale mașinii virtuale Java era că durata de execuție a programelor era sensibil mai mare decât a celor scrise in limbaje "tradiționale" compilate, cum ar fi C, C++, Pascal, Fortran etc.

Implementările moderne ale mașinii virtuale Java se caracterizează prin mărirea sensibilă a vitezei de executie, care se apropie deja de cea a programelor compilate. Aceasta se realizează, în special, prin introducerea unei compilări "just in time": codul de octeți este compilat, în momentul execuției, in cod nativ pentru calculatorul gazdă și abia apoi este executat.

Desigur că cea mai eficientă reducere a duratei de execuție se produce atunci când mașina virtuală Java este implementata hardware, astfel încât codul de octeti Java (bztecode) este cod nativ al acestei mașini. În acest caz, durata de execuție a programului este aceeași cu cea a unui program compilat tradițional.



© Copyright 2000 - Severin BUMBARU, Universitatea "Dunărea de Jos" din Galați