Razlika između JVM, JRE i JDK

1. Pregled

U ovom ćemo članku razgovarati o razlikama između JVM, JRE i JDK uzimajući u obzir njihove komponente i upotrebu.

2. JVM

Java virtualni stroj (JVM) je implementacija virtualnog stroja koji izvršava Java program.

JVM prvo tumači bytecode. Zatim pohranjuje podatke o nastavi u memorijsko područje. Konačno, izvršava bytecode koji generira java prevodilac.

To je apstraktni računalni stroj s vlastitim skupom uputa i manipulira raznim memorijskim područjima tijekom izvođenja.

Komponente JVM-a su:

  • Razredni utovarivači
  • Područja podataka o vremenu izvođenja
  • Izvršni motor

2.1. Razredni utovarivači

Početni zadaci JVM-a uključuju učitavanje, provjeru i povezivanje bajt-koda. Učitavači klase rješavaju ove zadatke.

Imamo detaljan članak posebno o razrednim utovarivačima.

2.2. Područja podataka o vremenu izvođenja

JVM definira različita memorijska područja za izvršavanje Java programa. Oni se koriste tijekom izvođenja i poznati su kao podatkovna područja tijekom izvođenja. Neka od tih područja kreiraju se prilikom pokretanja JVM-a i uništavaju se kad JVM izlazi, dok se neka stvaraju kada se stvori nit i uništavaju kad nit izlazi.

Razmotrimo ova područja jedno po jedno:

Područje metode

U osnovi, područje metode analogno je prostoru za pohranu kompajliranog koda. Pohranjuje strukture poput konstantnog spremišta vremena izvođenja, podataka polja i metoda, koda metoda i konstruktora, kao i potpuno kvalificirana imena klasa. JVM pohranjuje ove strukture za svaki razred.

Područje metode, poznato i kao prostor trajne generacije (PermGen), stvara se kad se JVM pokrene. Sjećanje za ovo područje ne mora biti susjedno. Sve JVM niti dijele ovo memorijsko područje.

Područje hrpe

JVM izdvaja memoriju za sve instance klase i nizove iz ovog područja.

Sakupljač smeća (GC) vraća memoriju hrpe za objekte. U osnovi, GC ima tri faze za povrat memorije od objekata, naime. dva manja GC i jedan glavni GC.

Memorija hrpe ima tri dijela:

  • Eden Space - dio je prostora Young Generation. Kada kreiramo objekt, JVM dodjeljuje memoriju iz ovog prostora
  • Survivor Space - to je također dio prostora Young Generation. Prostor za preživjele sadrži postojeće objekte koji su preživjeli manje GC faze GC-a
  • Usmjereni prostor - ovo je također poznato kao prostor stare generacije. U njemu se nalaze dugo preživjeli predmeti. U osnovi se postavlja prag za objekte mlade generacije, a kada se taj prag zadovolji, ti se objekti premještaju u prostor s razmjerom.

JVM stvara područje hrpe čim se pokrene. Sve niti JVM-a dijele ovo područje. Memorija za područje hrpe ne mora biti susjedna.

Područje stoga

Pohranjuje podatke kao okvire, a svaki okvir pohranjuje lokalne varijable, djelomične rezultate i ugniježđene pozive metoda. JVM stvara područje stoga kad god kreira novu nit. Ovo je područje privatno za svaku nit.

Svaki unos u stogu naziva se Stack Frame ili zapis aktivacije. Svaki okvir sadrži tri dijela:

  • Lokalni niz varijabli - sadrži sve lokalne varijable i parametre metode
  • Operand Stack - koristi se kao radni prostor za pohranu rezultata srednjeg izračuna
  • Podaci okvira - koriste se za pohranu djelomičnih rezultata, povratnih vrijednosti za metode i reference na Iznimka tablica koja pruža odgovarajuće informacije o bloku ulova u slučaju izuzetaka

Memorija za JVM stog ne mora biti susjedna.

PC registri

Svaka JVM nit ima zasebni registar računala koji pohranjuje adresu trenutno izvršavane upute. Ako je trenutno izvršavajuća uputa dio izvorne metode, tada je ova vrijednost nedefinirana.

Nativni stogovi metoda

Izvorne metode su one koje su napisane na jezicima koji nisu Java.

JVM pruža mogućnosti pozivanja ovih izvornih metoda. Klase matičnih metoda poznate su i kao "C stogovi". Oni pohranjuju podatke o izvornoj metodi. Kad god se izvorne metode kompiliraju u strojne kodove, obično koriste matični skup metoda kako bi pratili svoje stanje.

JVM stvara te hrpe kad god kreira novu nit. Stoga JVM niti ne dijele ovo područje.

2.3. Izvršni motor

Izvršni mehanizam izvršava upute koristeći informacije prisutne u memorijskim područjima. Ima tri dijela:

Tumač

Jednom kada učitavači razreda učitaju i provjere bajt kod, tumač izvršava bajt kod red po red. Ovo izvršavanje je prilično sporo. Nedostatak tumača je taj što se, kada se jedna metoda poziva više puta, svaki put zahtijeva novo tumačenje.

Međutim, JVM koristi JIT Compiler da ublaži taj nedostatak.

Sastavljač Just-in-Time (JIT)

JIT kompajler kompajlira bajtkod često zvanih metoda u izvorni kôd u vrijeme izvođenja. Stoga je odgovoran za optimizaciju Java programa.

JVM automatski nadgleda koje se metode izvršavaju. Jednom kada metoda postane prihvatljiva za JIT kompilaciju, planira se kompilacija u strojni kod. Ta je metoda tada poznata kao vruća metoda. Ova se kompilacija u strojni kod događa na zasebnoj JVM niti.

Kao rezultat, to ne prekida izvršavanje trenutnog programa. Nakon kompilacije u strojni kod, radi brže.

Sakupljač smeća

Java se brine o upravljanju memorijom pomoću Garbage Collection. To je postupak pregledavanja memorije hrpe, identificiranja koji se objekti koriste, a koji ne, i na kraju brisanja neiskorištenih objekata.

GC je daemon nit. Može se nazvati eksplicitno pomoću Sustav.gc() metoda, međutim, neće se izvršiti odmah i JVM odlučuje kada će pozvati GC.

2.4. Izvorno sučelje Java

Djeluje kao sučelje između Java koda i izvornih (C / C ++) knjižnica.

Postoje situacije u kojima Java sama ne zadovoljava potrebe vaše aplikacije, na primjer, implementirajući značajku ovisno o platformi.

U tim slučajevima možemo koristiti JNI da omogućimo pozivanje koda pokrenutog u JVM-u. Suprotno tome, omogućuje izvorne metode za pozivanje koda koji se izvodi u JVM-u.

2.5. Zavičajne knjižnice

To su knjižnice specifične za platformu i sadrže implementaciju izvornih metoda.

3. JRE

Java Runtime Environment (JRE) skup je softverskih komponenata koji se koriste za pokretanje Java aplikacija.

Ključne komponente JRE uključuju:

  • Implementacija Java virtualnog stroja (JVM)
  • Predavanja potrebna za pokretanje Java programa
  • Datoteke svojstava

O JVM-u smo razgovarali u gornjem odjeljku. Ovdje ćemo se usredotočiti na osnovne klase i datoteke podrške.

3.1. Bootstrap klase

Pronaći ćemo klase bootstrapa pod jre / lib /. Ovaj put je poznat i kao bootstrap put staze. Uključuje:

  • Runtime satovi u rt.jar
  • Predavanja o internacionalizaciji u i18n.jar
  • Klase pretvorbe znakova u charsets.jar
  • Drugi

Bootstrap ClassLoader učitava ove klase kad se JVM pokrene.

3.2. Prošireni razredi

Nastavu za produženje možemo pronaći u jre / lib / extn / koji djeluje kao direktorij za proširenja Java platforme. Ovaj put je poznat i kao nastavak klase.

Sadrži JavaFX runtime knjižnice u jfxrt.jar i lokacijski podaci za java.tekst i java.util paketi u localedata.jar. Korisnici također mogu dodati prilagođene staklenke u ovaj direktorij.

3.3. Postavke svojstva

Java platforma koristi ove postavke svojstva za održavanje svoje konfiguracije. Ovisno o njihovoj uporabi, nalaze se unutar različitih mapa / jre / lib /. To uključuje:

  • Konfiguracije kalendara u kalendar.svojstva
  • Konfiguracije prijave u sječa drva.svojstva
  • Mrežne konfiguracije u neto.svojstva
  • Svojstva primjene u / jre / lib / deploy /
  • Svojstva upravljanja u / jre / lib / management /

3.4. Drugi dokumenti

Osim gore spomenutih datoteka i klasa, JRE sadrži i datoteke za druga pitanja:

  • Upravljanje sigurnošću na jre / lib / sigurnost
  • Direktorij za postavljanje klasa podrške za aplete na jre / lib / aplet
  • Datoteke povezane s fontom na jre / lib / fontovi i drugi

4. JDK

Java Development Kit (JDK) pruža okruženje i alate za razvoj, sastavljanje, ispravljanje pogrešaka i izvršavanje Java programa.

Ključne komponente JDK uključuju:

  • JRE
  • Alati za razvoj

O JRE smo razgovarali u gornjem odjeljku.

Sada ćemo se usredotočiti na razne razvojne alate. Kategorizirajmo ove alate na temelju njihove upotrebe:

4.1. Osnovni alati

Ovi alati postavljaju temelje JDK i koriste se za stvaranje i izgradnju Java aplikacija. Među tim alatima možemo pronaći uslužne programe za kompajliranje, ispravljanje pogrešaka, arhiviranje, generiranje Javadocs-a itd.

Oni uključuju:

  • javac - čita definicije klase i sučelja i kompilira ih u datoteke klase
  • java - pokreće Java program
  • javadoc - generira HTML stranice API dokumentacije iz Java izvornih datoteka
  • prikladan - pronalazi i izvršava procesore bilješki na temelju bilješki prisutnih u skupu navedenih izvornih datoteka
  • preglednik apleta - omogućuje nam pokretanje Java apleta bez web preglednika
  • tegla - pakira Java aplete ili programe u jednu arhivu
  • jdb - alat za otklanjanje pogrešaka naredbenog retka koji se koristi za pronalaženje i ispravljanje grešaka u Java programima
  • javah - proizvodi C zaglavlje i izvorne datoteke iz Java klase
  • javap - rastavlja datoteke klase i prikazuje informacije o poljima, konstruktorima i metodama prisutnim u datoteci klase
  • extcheck - otkriva sukobe verzija između ciljne datoteke Java Archive (JAR) i trenutačno instalirane ekstenzije JAR datoteka

4.2. Sigurnosni alati

To uključuje alate za upravljanje ključevima i certifikatima koji se koriste za manipulaciju Java Keystores.

Java Keystore spremnik je za autorizacijske certifikate ili certifikate javnih ključeva. Slijedom toga, aplikacije koje se temelje na Javi često ih koriste za šifriranje, provjeru autentičnosti i posluživanje putem HTTPS-a.

Također, pomažu u postavljanju sigurnosnih pravila na našem sustavu i stvaranju aplikacija koje mogu raditi u okviru ovih politika u proizvodnom okruženju. To uključuje:

  • alat za ključeve - pomaže u upravljanju unosima pohrane ključeva, naime kriptografskim ključevima i certifikatima
  • jarsigner - generira digitalno potpisane JAR datoteke pomoću podataka o pohrani ključeva
  • policytool - omogućuje nam upravljanje datotekama konfiguracije vanjske politike koje definiraju sigurnosnu politiku instalacije

Neki sigurnosni alati također pomažu u upravljanju Kerberos ulaznicama.

Kerberos je mrežni protokol za provjeru autentičnosti.

Radi na temelju ulaznica kako bi se čvorovima koji komuniciraju putem nesigurne mreže omogućio međusobni dokazivanje identiteta na siguran način:

  • kinit - koristi se za dobivanje i predmemoriranje Kerberos ulaznica za dodjelu ulaznica
  • ktab - upravlja imenima principa i parovima ključeva u tablici ključeva
  • klist - prikazuje unose u predmemoriji lokalnih vjerodajnica i tablici ključeva

4.3. Alat za internacionalizaciju

Internacionalizacija je postupak dizajniranja aplikacije tako da se može prilagoditi raznim jezicima i regijama bez inženjerskih promjena.

U tu svrhu JDK donosi domorodac2ascii. Ovaj alat pretvara datoteku sa znakovima koje podržava JRE u datoteke kodirane u ASCII ili Unicode ekrane.

4.4. Alati za daljinsko pozivanje metoda (RMI)

RMI alati omogućuju daljinsku komunikaciju između Java aplikacija, pružajući tako prostor za razvoj distribuiranih aplikacija.

RMI omogućuje objektu koji se izvodi u jednom JVM-u da poziva metode na objektu koji se izvodi u drugom JVM-u. Ovi alati uključuju:

  • rmic - generira klase klatna, kostura i veza za udaljene objekte pomoću Java Remote Method Protocol (JRMP) ili Internet Inter-Orb Protocol (IIOP)
  • rmiregistry - kreira i pokreće udaljeni registar objekata
  • rmid - starts demon sustava aktivacije. To omogućuje registriranje i aktiviranje objekata u Java virtualnom stroju
  • serialver - vraća serijsku verziju UID za određene klase

4.5. Java IDL i RMI-IIOP alati

Jezik za definiranje sučelja Java (IDL) dodaje mogućnost zajedničke arhitekture posrednika zahtjeva temeljene na objektima (CORBA) Java platformi.

Ovi alati omogućavaju distribuiranim Java web aplikacijama pozivanje operacija na udaljenim mrežnim uslugama pomoću industrijskog standarda Object Management Group (OMG) - IDL.

Isto tako, mogli bismo koristiti internetski InterORB protokol (IIOP).

RMI-IIOP, tj. RMI preko IIOP omogućuje programiranje CORBA poslužitelja i aplikacija putem RMI API-ja. Omogućujući tako vezu između dviju aplikacija napisanih na bilo kojem jeziku sukladnom s CORBA-om putem internetskog InterORB protokola (IIOP).

Ovi alati uključuju:

  • tnameserv - privremena usluga imenovanja koja pruža stablo strukturirani direktorij za reference objekata
  • idlj - IDL-to-Java kompajler za generiranje Java veza za određenu IDL datoteku
  • orbd - omogućiti klijentima transparentno lociranje i pozivanje trajnih objekata na poslužitelju u CORBA okruženju
  • servertool - pruža sučelje naredbenog retka za registraciju ili poništavanje registracije trajnog poslužitelja s ORB Daemonom (orbd), pokrenite i isključite trajni poslužitelj registriran na ORB Daemon, itd

4.6. Alati za implementaciju Java

Ovi alati pomažu u postavljanju Java aplikacija i apleta na web. Oni uključuju:

  • paket200 - pretvara JAR datoteku u čopor200 datoteku pomoću Jave gzip kompresor
  • raspakiraj200 - preobražava čopor200 datoteku u JAR datoteku

4.7. Java dodatak alat

JDK nam pruža htmlconverter. Nadalje, koristi se zajedno s Java dodatkom.

S jedne strane, dodatak Java uspostavlja vezu između popularnih preglednika i Java platforme. Kao rezultat ove veze, apleti na web mjestu mogu se pokretati unutar preglednika.

S druge strane, htmlconverter je uslužni program za pretvorbu HTML stranice koja sadrži aplete u format za Java dodatak.

4.8. Alat za web pokretanje Java

JDK donosi čeljusti. Možemo ga koristiti zajedno s Java Web Startom.

Ovaj nam alat omogućuje preuzimanje i pokretanje Java aplikacija jednim klikom iz preglednika. Stoga nema potrebe za pokretanjem bilo kakvog postupka instalacije.

4.9. Alati za praćenje i upravljanje

To su izvrsni alati koje možemo koristiti za praćenje izvedbe JVM-a i potrošnje resursa. Evo nekoliko od ovih:

  • jconsole - pruža grafičku konzolu koja vam omogućuje nadgledanje i upravljanje Java programima
  • jps - navodi instrumentirane JVM-ove na ciljnom sustavu
  • jstat - prati JVM statistiku
  • jstatd - nadgleda stvaranje i završetak instrumentiranih JVM-ova

4.10. Alati za rješavanje problema

To su eksperimentalni alati koje možemo iskoristiti za rješavanje problema:

  • info - generira informacije o konfiguraciji za navedeni Java proces
  • jmap - ispisuje mape zajedničke memorije objekta ili detalje memorije hrpe određenog procesa
  • jsadebugd - spaja se na Java proces i djeluje kao poslužitelj za uklanjanje pogrešaka
  • jstack - ispisuje Java stack tragove Java niti za zadani Java proces

5. Zaključak

U ovom smo članku utvrdili da osnovna razlika između JVM, JRE i JDK leži u njihovoj upotrebi.

Prvo smo opisali kako je JVM apstraktni računalni stroj koji zapravo izvršava Java bajt kod.

Zatim smo objasnili kako jednostavno pokrenuti Java programe, koristimo JRE.

I na kraju, razumjeli smo kako razvijati Java programe, koristimo JDK.

Također smo uzeli neko vrijeme da istražimo alate i temeljne koncepte ovih komponenata.