Kako podesiti pametne telefone i računare. Informativni portal

Instalacija java mašine. JVM (Java virtuelna mašina)

Može se kompajlirati u Java bajtkod koji zatim može izvršiti JVM.

JVM je ključna komponenta Java platforme. Pošto su Java virtuelne mašine dostupne za mnoge hardverske i softverske platforme, Java se može posmatrati i kao međuvera i kao samostalna platforma, otuda i princip piši jednom, pokreni bilo gde. Korištenje jednog bajt koda za mnoge platforme omogućava da se Java opisuje kao "jednom kompajlirano, pokreni bilo gdje" (kompajliraj jednom, pokreni bilo gdje).

JVM specifikacija

Sun protiv IBM-ovog sukoba

2001. godine, sa ciljem razvoja standarda za višeplatformske Desktop-aplikacije, Eclipse.

IBM VisualAge. IBM je uspeo da uravnoteži interese slobodne zajednice i interese biznisa (svoje sopstvene interese) u Eclipse javnoj licenci, koju priznaje FSF.

Projekat se uspješno razvija, prepoznat od strane industrije, u velikoj mjeri odvojen od IBM-a u nezavisnu Eclipse fondaciju.


Wikimedia fondacija. 2010.

Pogledajte šta je "Java virtuelna mašina" u drugim rečnicima:

    Java virtuelna mašina- Glavni dio Java Runtime Environment (JRE). Java virtuelna mašina tumači i izvršava Java bajt kod koji je Java kompajler prethodno generisao iz Java izvornog koda Java programa. JVM se može koristiti za ... - razvijen od strane JavaSoft. Web aplikacije napravljene pomoću njega mogu prirodno raditi unutar operativnog sistema, ili web pretraživača, ili u okruženju emulacije poznatom kao Java virtuelna mašina... Elektronski poslovni rječnik

    - (JPF) Besplatan alat za testiranje višenitnih Java programa. U suštini, to je Java virtuelna mašina na osnovu koje se implementiraju metode provjere modela. To znači da ... ... Wikipedia

    Java virtuelna mašina- Bajt kod tumača Java programa. Virtuelna mašina dizajnirana za pokretanje Java apleta. JVM je ugrađen u većinu web pretraživača. Ovo omogućava izvršavanje Java apleta na strani klijenta, čiji su pozivi obezbeđeni u ... ... Vodič za tehničkog prevodioca

    Drugi naziv za ovaj koncept je "Java"; vidi i druga značenja. Ne treba se brkati sa JavaScript-om. Čas Java jezika ... Wikipedia

    Potrebno je provjeriti kvalitet prijevoda i uskladiti članak sa stilskim pravilima Wikipedije. Možete pomoći u poboljšanju ovog članka ispravljanjem grešaka. Original n ... Wikipedia

JVM je ključna komponenta Java platforme. Java virtuelna mašina tumači i izvršava Java Bytecode koji je prethodno generisan iz Java izvornog koda od strane Java kompajlera (javac).

Budući da su Java virtuelne mašine dostupne za mnoge hardverske i softverske platforme, Java se može posmatrati i kao međuvera i kao samostalna platforma, otuda i princip piši jednom, pokreni bilo gde. Korištenje jednog bajtkoda na više platformi omogućava da se Java opiše kao "kompajliraj jednom, pokreni bilo gdje".

Programi namijenjeni za rad na JVM-u moraju biti kompajlirani u standardiziranom prijenosnom binarnom formatu, obično predstavljenom kao .class datoteke. Program se može sastojati od mnogo klasa smještenih u različitim datotekama. Da bi se olakšalo postavljanje velikih programa, neke od .class datoteka mogu se upakovati zajedno u takozvanu .jar datoteku (skraćeno od Java Archive).

JVM virtuelna mašina koja izvršava datoteke .class ili .jar emulacijom instrukcija napisanih za JVM tumačenjem ili korištenjem kompajlera za pravo na vrijeme (JIT) kao što je HotSpot kompanije Sun microsystems. JIT kompilaciju koristi većina JVM-ova ovih dana radi brzine. Postoje i kompajleri unapred koji omogućavaju programerima aplikacija da prekompajliraju datoteke klase u kod specifičan za platformu.

JVM, koji je instanca JRE (Java Runtime Environment), dolazi u igru ​​kada se izvršavaju Java programi. Po završetku izvođenja, ovu instancu odbacuje sakupljač smeća. JIT je dio Java virtuelne mašine koja se koristi za ubrzavanje vremena izvršavanja aplikacija. JIT istovremeno kompajlira dijelove bajtkoda koji imaju sličnu funkcionalnost i stoga smanjuje količinu vremena kompilacije.

JVM je mašina za slaganje. To znači da u njemu nema opštih registara, a operacije se izvode nad podacima na steku. Stog operanada dodijeljen za svaki okvir služi ovoj svrsi. Kada se izvršavaju Java bajtkod instrukcije koje modifikuju podatke, operandi takvih instrukcija se iskaču iz steka operanda, a rezultati izvršenja instrukcija se stavljaju na isti stog.

Vrijeme izvođenja metode sadrži informacije potrebne za dinamičko povezivanje, povratak iz metode i rukovanje izuzecima. Kod klase (nalazi se u opsegu klase) odnosi se na vanjske metode i varijable koje koriste simboličke veze. Dinamičko povezivanje prevodi simboličke veze u stvarne veze. Vrijeme izvođenja sadrži veze do tablice simbola metoda kroz koje se vrše pozivi vanjskim metodama i varijablama.

Vrijeme izvođenja također sadrži informacije potrebne za vraćanje iz metode: pokazivač na okvir pozivatelja, vrijednost pc registra koju treba vratiti, sadržaj registara pozivaoca i pokazivač na područje za pisanje povratne vrijednosti.

Informacije o rukovanju izuzecima sadrže veze do odjeljaka za rukovanje izuzetkom u metodi klase.

Vrijeme izvođenja također pristupa podacima sadržanim u opsegu klase, uključujući konstante i varijable klase.

JVM komande se sastoje od jednobitnog opkoda i mogu sadržavati i operande. Broj i veličina operanada određeni su kodom operacije, neke instrukcije nemaju operande

Šta je JVM?

JVM je motor koji obezbjeđuje okruženje za izvršavanje za pokretanje Java koda ili aplikacija. Konvertuje Java bajt kod u mašinski jezik. JVM je dio JRE (Java Run Environment). To je skraćenica od Java Virtual Machine

  • U drugim programskim jezicima, kompajler proizvodi mašinski kod za određeni sistem. Međutim, Java kompajler proizvodi kod za virtuelnu mašinu poznatu kao Java virtuelna mašina.
  • Prvo, Java kod je usklađen u bajt kodu. Ovaj bajt kod se tumači na različitim mašinama
  • Između host sistema i Java izvora, Bytecode je posrednički jezik.
  • JVM je odgovoran za dodjelu memorijskog prostora.

U ovom tutorijalu naučit ćete-

JVM Architecture

Hajde da razumemo arhitekturu JVM-a. Sadrži učitavač klasa, memorijsku oblast, mašinu za izvršavanje itd.

1) ClassLoader

Učitavač klasa je podsistem koji se koristi za učitavanje fajlova klasa. Obavlja tri glavne funkcije tj. Učitavanje, povezivanje i inicijalizacija.

2) Područje metode

JVM Method Area pohranjuje strukture klasa kao što su metapodaci, stalno runtime pool i kod za metode.

Svi objekti, njihove povezane varijable instance i nizovi su pohranjeni u hrpi. Ova memorija je zajednička i dijeli se na više niti.

4) JVM stekovi jezika

Stogovi jezika Java pohranjuju lokalne varijable i to su djelomični rezultati. Svaka nit ima svoj JVM stek, kreiran istovremeno sa kreiranjem niti. Novi okvir se kreira kad god se metoda pozove, a briše se kada je proces pozivanja metode završen.

5) PC registri

PC registar čuva adresu instrukcije Java virtuelne mašine koja se trenutno izvršava. U Javi, svaka nit ima svoj poseban PC registar.

6) Native Method Stacks

Stogovi domaćih metoda sadrže instrukcije izvornog koda ovisno o izvornoj biblioteci. Napisan je na drugom jeziku umjesto na Javi.

7) Izvršni mehanizam

To je vrsta softvera koji se koristi za testiranje hardvera, softvera ili kompletnih sistema. Motor za izvođenje testa nikada ne nosi nikakve informacije o testiranom proizvodu.

8) Interfejs izvorne metode

Interfejs domaće metode je okvir za programiranje. Omogućuje Java kodu koji se izvodi u JVM-u da poziva biblioteke i izvorne aplikacije.

9) Biblioteke izvornih metoda

Native Libraries je kolekcija Native Libraries (C, C ++) koje su potrebne Execution Engine-u.

Proces kompilacije i izvršavanja softverskog koda

Da biste napisali i izvršili softverski program, potrebno vam je sljedeće

1) Urednik- Da biste upisali svoj program, za to bi se mogla koristiti notepad

2) Kompajler- Za pretvaranje vašeg programa visokog jezika u izvorni mašinski kod

3) Linker- Za kombinovanje različitih referentnih programskih datoteka u vašem glavnom programu zajedno.

4) Utovarivač- Za učitavanje datoteka sa vašeg sekundarnog uređaja za pohranu kao što je tvrdi disk, fleš disk, CD u RAM radi izvršavanja. Učitavanje se automatski vrši kada izvršite svoj kod.

5) Izvršenje- Stvarno izvršenje koda kojim rukuju vaš OS i procesor.

Uz ovu pozadinu, pogledajte sljedeći video i naučite rad i arhitekturu Java virtuelne mašine.

Proces kompilacije i izvršavanja C koda

Da biste razumjeli proces kompajliranja Jave u Javi. Hajde da prvo na brzinu pogledamo proces sastavljanja i povezivanja u C.

Pretpostavimo da ste u glavnom pozvali dvije funkcije f1 i f2. Glavna funkcija je pohranjena u datoteci a1.c.

Funkcija f1 je pohranjena u datoteci a2.c

Funkcija f2 je pohranjena u datoteci a3.c

Svi ovi fajlovi, tj. a1.c, a2.c i a3.c, se dostavljaju kompajleru. Čiji su izlaz odgovarajući objektni fajlovi koji su mašinski kod.

Sljedeći korak je integracija svih ovih objektnih datoteka u jednu .exe datoteku uz pomoć linkera. Povezivač će spojiti sve ove datoteke i proizvoditi .exe datoteku.

Tokom izvođenja programa, program za učitavanje će učitati a.exe u RAM radi izvršenja.

Kompilacija i izvođenje Java koda u Java VM

Pogledajmo proces za JAVA. U vašem glavnom, imate dvije metode f1 i f2.

  • Glavna metoda je pohranjena u datoteci a1.java
  • f1 je pohranjen u datoteci kao a2.java
  • f2 je pohranjen u datoteci kao a3.java

Kompajler će kompajlirati tri fajla i proizvoditi 3 odgovarajuća .class fajla koja se sastoji od BYTE koda. Za razliku od C, povezivanje se ne vrši.

Java VM ili Java virtuelna mašina se nalazi u RAM-u. Tokom izvršavanja, koristeći učitavač klasa, fajlovi klasa se unose u RAM. BYTE kod je provjeren za bilo kakve povrede sigurnosti.

Zatim, izvršni mehanizam će konvertovati bajt kod u izvorni mašinski kod. Ovo je upravo na vrijeme sastavljanja. To je jedan od glavnih razloga zašto je Java relativno spora.

BILJEŠKA: JIT ili Just-in-time kompajler je deo Java virtuelne mašine (JVM). Interpretira dio bajt koda koji ima sličnu funkcionalnost u isto vrijeme.

Zašto je Java i interpretirani i kompajlirani jezik?

Programski jezici se klasifikuju kao
  • Jezik višeg nivoa pr. C++, Java
  • Jezici srednjeg nivoa npr. C
  • Jezik niskog nivoa Ex Assembly
  • konačno najniži nivo kao mašinski jezik.

A kompajler je program koji konvertuje program sa jednog nivoa jezika na drugi. Primjer konverzije C++ programa u mašinski kod.

Java kompajler pretvara java kod visokog nivoa u bajt kod (koji je takođe vrsta mašinskog koda).

An tumač je program koji konvertuje program na jednom nivou u drugi programski jezik na isti nivo. Primjer konverzije Java programa u C++

U Javi, Just In Time Code generator pretvara bajt kod u izvorni mašinski kod koji je na istim nivoima programiranja.

Dakle, Java je i kompajliran i interpretiran jezik.

Zašto je Java spora?

Dva glavna razloga za sporost Jave su

  1. Dinamičko povezivanje: Za razliku od C-a, povezivanje se vrši u vrijeme izvođenja, svaki put kada se program pokrene u Javi.
  2. Interpretator: Konverzija bajt koda u izvorni mašinski kod se vrši u toku rada u Javi što dodatno usporava brzinu

Međutim, najnovija verzija Jave je u velikoj mjeri riješila uska grla u performansama.

Sažetak:

  • JVM ili Java virtuelna mašina je motor koji pokreće Java kod. Konvertuje Java bajt kod u mašinski jezik.
  • U JVM-u, Java kod se kompajlira u bajt kod. Ovaj bajt kod se tumači na različitim mašinama
  • JIT ili Just-in-time kompajler je deo Java virtuelne mašine (JVM). Koristi se za ubrzavanje vremena izvršenja
  • U poređenju sa drugim kompajlerskim mašinama, Java može biti spora u izvršavanju.
JVM (Java virtuelna mašina) je srce Java programskog jezika. Java okruženje se sastoji od pet elemenata:
■ Java jezik
■ Definicija bajtkoda
■ Java / Sun biblioteke klasa
■ Java virtuelna mašina
■ Struktura .class datoteke

Od svih ovih pet elemenata, elementi koji su doveli do Javinog uspjeha
■ Definicija bajt koda,
■ strukturu datoteke .class,
■ i Java virtuelna mašina.

Dakle, "napiši jednom i pokreni bilo gdje" je zapravo omogućena prenosivost .class datoteke, koja pomaže u radu na bilo kojem računaru ili čipsetu koristeći Java virtuelnu mašinu.

1.3.1 Šta je Java virtuelna mašina?

Virtuelna mašina je softver zasnovan na konceptima i ideji imaginarnog računara koji ima logički skup instrukcija i komandi koje određuju rad tog računara. Može se reći da je mali operativni sistem. Formira neophodan nivo apstrakcije, gde se postiže nezavisnost od platforme i opreme koja se koristi.

Kompajler pretvara izvorni kod u kod koji se zasniva na imaginarnom sistemu kompjuterskih instrukcija i ne zavisi od specifičnosti procesora. Interpretator je aplikacija koja razumije ove tokove naredbi i prevodi te naredbe za hardver koji se koristi, kojem tumač pripada. JVM interno kreira sistem za podršku izvršavanju, koji pomaže izvršenju koda kada
■ učitavanje .class fajlova,
■ upravljanje memorijom
■ izvođenje obrade izuzetaka.

Zbog nedosljednosti hardverskih platformi, virtuelna mašina koristi koncept steka, koji sadrži sljedeće informacije:
■ Deskriptori stanja metode
■ Operandi bajt kodovima
■ Parametri metode
■ Lokalne varijable

Kada JVM izvršava kod, postoji jedan poseban registar koji se koristi kao brojač koji pokazuje koje se komande trenutno izvršavaju. Ako je potrebno, naredbe mijenjaju program, mijenjaju tok izvršenja, inače je tok sekvencijalan i kreće se od jedne komande do druge.

Još jedan koncept koji postaje popularan je upotreba kompajlera Just In Time (JIT). Pregledači poput Netscape Navigator 4.0 i Internet Explorer 4.0 uključuju JIT kompajlere koji ubrzavaju izvršavanje Java koda. Glavni cilj JIT-a je da konvertuje set instrukcija bajtkoda u instrukcije mašinskog koda ciljane na određeni mikroprocesor. Ove naredbe se spremaju i koriste kad god se uputi zahtjev ovoj metodi.

1.3.2 Java Runtime

JRE (Java Runtime Environment) JVM koji je u interakciji sa hardverom s jedne strane i programom s druge strane. JRE izvršava kod kompajliran za JVM:
Učitavanje .class fajlova
Izvodi "Class Loader"
Učitavač klasa vrši sigurnosnu provjeru da li su datoteke u upotrebi na mreži.
Provjera bajt koda
Izvodi "verifikator bajt koda"
Verifikator bajtkoda provjerava format koda, konverzije tipa objekta i provjerava kršenja pristupa.
Izvršenje koda
Izvodi "interpreter at runtime"
Tumač izvršava bajtkodove i postavlja upite o opremi koja se koristi.


Slika 1.3: Java Runtime

1.3.3 Rukovanje izuzecima i upravljanje memorijom

U C, C++ ili Pascal, programeri su koristili primitivne metode dodjeljivanja i oslobađanja blokova memorije - heap memorije. Dinamička memorija je veliki komad memorije koji je označen kao količina sve memorije.

Dinamička memorija se koristi:
Besplatna lista blokova
Distribuirana lista blokova

Besplatna lista provjerava blok memorije kad god se postavi zahtjev. Mehanizam alociranja je "first-fit-block metoda", pri čemu se prvi najmanji blok memorije dodjeljuje ovisno o zahtjevu. Ova procedura dodjeljuje i oslobađa male količine memorije različitih veličina iz hrpe, dok minimizira fragmentaciju hrpe.

Postoji faza kroz koju se postavlja zahtjev za memorijom - da se dobije veći blok memorije od raspoloživog. U takvim slučajevima, heap manager mora stvoriti više memorije. Ova tehnika se naziva zbijanje. To je proces kojim se svi slobodni dostupni blokovi memorije spajaju, pomičući slobodnu memoriju na jedan kraj hrpe, stvarajući tako jedan veliki blok memorije.

Java virtuelna mašina koristi dve odvojene hrpe za statičku i dinamičku alokaciju memorije.

Dinamička memorija – Ne obavlja dinamičko rukovanje izuzetcima memorije, čime se čuvaju sva svojstva klase, trajni bazen i tabele metoda.

Druga hrpa se opet dijeli na dva dijela, koji se po potrebi mogu proširiti u suprotnim smjerovima. Jedna sekcija se koristi za pohranjivanje uzoraka objekata, a druga sekcija se koristi za pohranjivanje deskriptora ovih uzoraka. Deskriptor je struktura koja se sastoji od dva pokazivača. Pokažite na tablicu metoda objekta i druge stavke na uzorak tog objekta. Ovaj položaj u osnovi eliminiše potrebu za očuvanjem putanja objekata prilikom modifikacije pokazivača nakon zbijanja. Sve što treba da uradimo je da ažuriramo vrednost pokazivača ručke.

Algoritam za obradu izuzetaka primjenjuje se na objekte dodijeljene hrpi. Pošto je primljen zahtjev za blok memorije, heap prvo provjerava slobodnu listu, a ako hrpa ne može pronaći slobodne blokove memorije, poziva se rukovanje izuzetkom čim je sistem neaktivan dovoljan vremenski period. U slučajevima kada su aplikacije vrlo interaktivne i vrijeme zastoja sistema je minimizirano, aplikacija bi trebala eksplicitno pozvati rukovanje izuzecima.

Sakupljač izuzetaka poziva završnu metodu prije nego što se skupi uzorak objekta korištenjem rukovanja izuzetkom. Metoda prestanka se koristi za čišćenje vanjskih resursa poput datoteka i tokova koji su otvoreni i o kojima se ne brine standardno rukovanje izuzecima. Čak i ako eksplicitno pozovemo rukovanje izuzetkom metodom (System.gc ()), to neće raditi brzo. Samo je planirano da proradi. To također znači da se rukovanje izuzetkom ne može pozvati. To je zato što se niti za obradu izuzetaka izvode s vrlo niskim prioritetom i mogu se često prekidati. Ovo se može dogoditi kada naš objekt nikada prije nije bio lociran u memoriji.

Top srodni članci