Što je JRE? Uvod u Java Runtime Environment

Zajedno, Java Development Kit (JDK), Java Virtual Machine (JVM) i Java Runtime Environment (JRE) čine snažnu trifektu komponenti Java platforme za razvoj i pokretanje Java aplikacija. Prethodno sam predstavio JDK i JVM. U ovom brzom vodiču naučit ćete o JRE-u, koji je runtime okruženje za Javu.

Praktično govoreći, runtime okruženje je dio softvera dizajniran za pokretanje drugog softvera. Kao runtime okruženje za Javu, JRE sadrži biblioteke klase Java, učitavač klase Java i Java virtualni stroj. U ovom sustavu:

  • Klasa utovarivač je odgovoran za pravilno učitava klase i povezuje ih s temeljnim Java klase knjižnica.
  • JVM je odgovoran za osiguravanje Java imaju resurse koji su im potrebni za pokretanje i obavljanje dobro u uređaju ili cloud okruženju.
  • JRE je uglavnom spremnik za one ostalih komponenti, te je odgovoran za orkestrira svoje aktivnosti.

Istražit ćemo puno dublje kako te komponente rade zajedno u odjeljcima koji slijede.

Instaliranje JDK, JRE i JVM

Iz perspektive instalacije, svaki put kada preuzmete JDK, on ​​će sadržavati JRE kompatibilan s verzijom, a taj će JRE sadržavati zadani JVM. JRE možete preuzeti i zasebno s JDK-a, a možete birati između različitih JVM-ova. Zadane vrijednosti dobro funkcioniraju za većinu implementacija, posebno kada započinjete s Javom.

Što je runtime okruženje?

Softverski program treba izvršiti, a za to mu je potrebno okruženje za pokretanje. Runtime okruženje učitava datoteke klase i osigurava pristup memoriji i drugim sistemskim resursima za njihovo pokretanje. U prošlosti je većina softvera koristila operativni sustav (OS) kao svoje vrijeme izvođenja. Program se izvodio unutar računala na kojem se nalazio, ali se za pristup resursima oslanjao na postavke operativnog sustava. Resursi u ovom slučaju bile bi stvari poput memorije i programskih datoteka i ovisnosti. Java Runtime Environment promijenio je sve to, barem za Java programe.

WORA za Javu

Kada je prvi put predstavljen, Javin princip "piši jednom, trči bilo gdje" smatrao se revolucionarnim, ali danas je prihvaćen kao norma za većinu softverskih sustava.

Java Runtime Environment

Softver možemo gledati kao niz slojeva koji se nalaze na vrhu hardvera sustava. Svaki sloj pruža usluge koje će koristiti (i zahtijevati) slojevi iznad njega. Java Runtime Environment softverski je sloj koji se izvodi na vrhu operacijskog sustava računala, pružajući dodatne usluge specifične za Javu.

JRE izravnava raznolikost operativnih sustava, osiguravajući da se Java programi mogu izvoditi na gotovo bilo kojem OS-u bez izmjena. Također pruža usluge s dodanom vrijednošću. Automatsko upravljanje memorijom jedna je od najvažnijih JRE usluga koja osigurava da programeri ne moraju ručno kontrolirati dodjelu i preraspodjelu memorije.

Ukratko, JRE je svojevrsni meta-OS za Java programe. To je klasičan primjer apstrakcije , apstrahiranje osnovnog operativnog sustava u dosljednu platformu za pokretanje Java aplikacija.

Kako JRE radi s JVM-om

Java Virtual Machine je pokrenut softverski sustav odgovoran za izvršavanje Java programa uživo. JRE je sustav na disku koji uzima vaš Java kôd, kombinira ga s potrebnim knjižnicama i pokreće JVM da ga izvrši.

JRE sadrži knjižnice i softver koji vaši Java programi trebaju pokretati. Kao primjer, učitavač klase Java dio je Java Runtime Environment. Ovaj važan dio softvera učitava kompilirani Java kôd u memoriju i povezuje ga s odgovarajućim knjižnicama Java klase.

U slojevitom prikazu koji sam upravo opisao, JVM je stvorio JRE. Iz perspektive paketa, JRE sadrži JVM, kao što prikazuje slika 1.

Matthew Tyson

Instaliranje i korištenje JRE-a

Iako postoji konceptualna strana JRE-a, u stvarnoj praksi to je samo softver instaliran na računalu, čija je svrha pokretanje vaših Java programa. Kao programer, uglavnom ćete surađivati ​​s JDK i JVM, jer su to komponente platforme koje koristite za razvoj i pokretanje Java programa. Kao korisnik Java aplikacije, više biste bili uključeni u JRE, koji vam omogućuje pokretanje tih programa.

U većini slučajeva vaše računalo dolazi s instaliranom Javom i uz njega će biti uključen i JRE. Ako ikada trebate ručno instalirati ili nadograditi, trenutnu verziju JRE možete preuzeti s Oraclea.

JRE verzije

Java Runtime Environment ažurira se za svaku novu verziju Jave, a njegovi brojevi verzija poklapaju se sa sustavom za inačice Java platforme, tako da na primjer JRE 1.8 pokreće Javu 8. Iako možete izabrati razne JDK pakete (kao što je Enterprise Edition ili Standard Edition) što nije slučaj sa JRE. Većina računala koristi JRE razvijen za Java SE, koji može pokretati bilo koji Java program bez obzira na to kako je razvijen. Većina mobilnih uređaja dolazi s JRE za Java ME, koji je unaprijed instaliran na mobilnom uređaju i nije dostupan za preuzimanje.

Jednom kada je JRE instaliran, možete komunicirati s njim na naredbenom retku unosom  java -versionkoji će vam reći koja je verzija instalirana. Na POSIX sustavima uvijek možete provjeriti instalirano mjesto pomoću which java.

JRE u devopsu

JRE nije baš uočljiv u fazi razvoja, gdje uglavnom samo pokreće vaše programe u OS-u ili IDE-u po vašem izboru. JRE igra malo istaknutiju ulogu u devopsu i administraciji sustava, jer se koristi za nadzor i konfiguraciju.

U osnovi, JRE nudi "gumbe" koje biste koristili za konfiguriranje i kontrolu karakteristika Java programa. Korištenje memorije glavni je primjer, kruh i maslac administracije sustava. Iako je upotreba memorije uvijek važna, ona je od ključne važnosti za konfiguracije oblaka, a devops je tehnologija zasnovana na oblaku. Ako radite u devops okruženju ili vas zanima razgranavanje u devops, dobra je ideja razumjeti kako Java memorija radi i kako se nadgleda u JRE.

Devops ili sysadmin?

Devops je novi pojam, ali opisuje nešto što je istina desetljećima, a to je interoperabilnost između razvoja i operacija. U tom smislu, devops je samo noviji pojam za ono što se prije nazivalo operacijama ili administracijom sustava. Poput sysadmina, važan aspekt devopa je upravljanje sustavima potrebnim za izvršavanje softvera. Upravljanje JRE-om dio je upravljanja sustavima koji pokreću Java programe.

Java memorija i JRE

Java memorija sastoji se od tri komponente: hrpe, stoga i metaprostora (koji se prije nazivao permgen).

  • Metaspace je mjesto u kojem Java zadržava nepromjenjive podatke vašeg programa poput definicija klasa.
  • Prostor hrpe je mjesto gdje Java zadržava promjenjivi sadržaj.
  • Prostor steka je mjesto gdje Java pohranjuje izvršavanje funkcije i reference varijabli.

Upravljanje memorijom u Javi 8

Do Jave 8, metaprostor je bio poznat kao permgen. Osim što je puno hladnije ime, metaprostor je značajna promjena u načinu na koji programeri komuniciraju s Java-ovim memorijskim prostorom. Prije biste upotrijebili naredbu java -XX:MaxPermSizeza praćenje veličine prostora za permgen. Od Jave 8 prema naprijed, Java automatski povećava veličinu metaprostora kako bi udovoljila meta-potrebama vašeg programa. Java 8 također je uvela novu zastavu MaxMetaspaceSizekoja se može koristiti za ograničavanje veličine metaprostora.

Ostale opcije memorije, hrpa i hrpa, ostaju iste u Javi 8.

Konfiguriranje prostora hrpe

Prostor hrpe najdinamičniji je dio Java memorijskog sustava. Pomoću -Xmsi -Xmxzastavica možete reći Javi koliko je velika za pokretanje hrpe i koliko velika da joj dopustite da postane. Razumijevanje načina podešavanja ovih zastavica za određene programske potrebe važan je aspekt upravljanja memorijom u Javi. Idealno je učiniti hrpu dovoljno velikom za postizanje najučinkovitijeg odvoza smeća. Odnosno, želite omogućiti dovoljno memorije za pokretanje programa, ali ne želite da bude veća od potrebnog.

Konfiguriranje prostora stoga

Prostor steka je mjesto u kojem su pozivi funkcija i reference varijabli u redu. Prostor stoga izvor je druge najpoznatije pogreške u programiranju Java: iznimka preljeva steka (prva je iznimka null pokazivača). Iznimka Stack Overflow ukazuje na to da ste ponestane stog prostora, jer previše toga je rezerviran. Obično ćete dobiti preljev steka kad se metoda ili metode međusobno pozivaju na kružni način, čime u stog posvećuju sve veći broj poziva funkcija.

Pomoću -Xssprekidača konfigurirate početnu veličinu stoga. Stog tada dinamično raste u skladu s potrebama programa.

Nadzor Java aplikacija

Iako je nadgledanje aplikacija funkcija JVM-a, JRE pruža mogućnosti konfiguracije, koje su nužna polazna osnova za nadgledanje. Dostupni su razni alati za nadgledanje Java aplikacija, od klasika (poput naredbe Unix top) do sofisticiranih rješenja za daljinsko nadgledanje poput Oracleovog nadzora infrastrukture.

Između ovih opcija nalaze se vizualni profili poput VisualVM-a koji omogućuju pregled JVM-a koji radi. Ovi alati omogućuju praćenje žarišnih točaka i curenja memorije, kao i praćenje ukupne potrošnje memorije u vašem sustavu.

Zaključak

Java Runtime Environment je program na disku koji učitava Java programe za izvršavanje JVM-a. JRE je uključen prema zadanim postavkama kada preuzmete Java Development Kit, a svaki JRE uključuje osnovne knjižnice Java klase, učitavač Java klase i Java virtualni stroj. Korisno je razumjeti kako JVM, JDK i JRE međusobno djeluju, posebno za rad u oblaku i devops okruženjima. U tim okruženjima JRE ima snažniju ulogu u praćenju i konfiguraciji nego što bi to bio slučaj u tradicionalnom razvoju Java aplikacija.

Ovu priču, "Što je JRE? Uvod u Java Runtime Environment" izvorno je objavio JavaWorld.