Co to jest środowisko JRE? Wprowadzenie do środowiska Java Runtime Environment

Java Development Kit (JDK), Java Virtual Machine (JVM) i Java Runtime Environment (JRE) tworzą razem potężną trójkę komponentów platformy Java do tworzenia i uruchamiania aplikacji Java. Wcześniej przedstawiłem JDK i JVM. W tym krótkim samouczku dowiesz się o środowisku JRE, które jest środowiskiem wykonawczym dla języka Java.

Praktycznie rzecz biorąc, środowisko wykonawcze to oprogramowanie zaprojektowane do uruchamiania innego oprogramowania. Jako środowisko wykonawcze dla języka Java, JRE zawiera biblioteki klas Java, moduł ładujący klasy Java i wirtualną maszynę języka Java. W tym systemie:

  • Moduł ładujący klasy jest odpowiedzialny za prawidłowe ładowanie klas i łączenie ich z podstawowymi bibliotekami klas Java.
  • Maszyna JVM jest odpowiedzialna za zapewnienie aplikacjom Java zasobów potrzebnych do działania i dobrego działania na urządzeniu lub w środowisku chmury.
  • Środowisko JRE jest głównie kontenerem dla tych innych składników i jest odpowiedzialne za orkiestrację ich działań.

W kolejnych sekcjach omówimy znacznie dokładniej, w jaki sposób te komponenty współpracują.

Instalowanie JDK, JRE i JVM

Z punktu widzenia instalacji, za każdym razem, gdy pobierasz pakiet JDK, będzie on zawierał środowisko JRE zgodne z wersją, a środowisko JRE będzie zawierać domyślną maszynę JVM. Możesz również pobrać JRE niezależnie od JDK i możesz wybierać spośród różnych JVM. Ustawienia domyślne działają dobrze w przypadku większości implementacji, zwłaszcza gdy zaczynasz od języka Java.

Co to jest środowisko wykonawcze?

Program musi działać, a do tego potrzebuje środowiska, w którym działa. Środowisko wykonawcze ładuje pliki klas i zapewnia dostęp do pamięci i innych zasobów systemowych, aby je uruchomić. W przeszłości większość oprogramowania wykorzystywała system operacyjny (OS) jako środowisko wykonawcze. Program działał na dowolnym komputerze, na którym był, ale polegał na ustawieniach systemu operacyjnego w zakresie dostępu do zasobów. Zasobami w tym przypadku byłyby takie rzeczy, jak pamięć i pliki programów oraz zależności. Środowisko Java Runtime Environment zmieniło to wszystko, przynajmniej w przypadku programów w języku Java.

WORA dla Java

Kiedy wprowadzono ją po raz pierwszy, zasada Java „napisz raz, uruchom gdziekolwiek” była uważana za rewolucyjną, ale dziś została przyjęta jako norma dla większości systemów oprogramowania.

Środowisko wykonawcze Java

Na oprogramowanie możemy spojrzeć jako na szereg warstw znajdujących się na wierzchu sprzętu systemowego. Każda warstwa zapewnia usługi, które będą używane (i wymagane) przez warstwy nad nią. Java Runtime Environment to warstwa oprogramowania, która działa na szczycie systemu operacyjnego komputera, zapewniając dodatkowe usługi specyficzne dla języka Java.

Środowisko JRE wygładza różnorodność systemów operacyjnych, zapewniając, że programy Java mogą działać w praktycznie każdym systemie operacyjnym bez modyfikacji. Świadczy również usługi o wartości dodanej. Automatyczne zarządzanie pamięcią to jedna z najważniejszych usług środowiska JRE, dzięki której programiści nie muszą ręcznie sterować alokacją i realokacją pamięci.

Krótko mówiąc, środowisko JRE jest rodzajem meta-OS dla programów Java. To klasyczny przykład abstrakcji , abstrakcji systemu operacyjnego w spójną platformę do uruchamiania aplikacji Java.

Jak środowisko JRE współpracuje z maszyną JVM

Java Virtual Machine to działający system oprogramowania odpowiedzialny za wykonywanie programów Java na żywo. Środowisko JRE to system na dysku, który pobiera kod Java, łączy go z niezbędnymi bibliotekami i uruchamia maszynę JVM w celu wykonania.

Środowisko JRE zawiera biblioteki i oprogramowanie potrzebne do uruchamiania programów Java. Na przykład program ładujący klasy Java jest częścią środowiska Java Runtime Environment. Ten ważny element oprogramowania ładuje skompilowany kod Java do pamięci i łączy go z odpowiednimi bibliotekami klas Java.

W widoku warstwowym, który właśnie opisałem, JVM jest tworzony przez środowisko JRE. Z perspektywy pakietu środowisko JRE zawiera maszynę JVM, jak pokazano na rysunku 1.

Matthew Tyson

Instalowanie i używanie środowiska JRE

Chociaż środowisko JRE ma stronę koncepcyjną, w praktyce jest to po prostu oprogramowanie instalowane na komputerze, którego celem jest uruchamianie programów Java. Jako programista będziesz pracować głównie z JDK i JVM, ponieważ są to komponenty platformy, których używasz do tworzenia i uruchamiania programów Java. Jako użytkownik aplikacji Java będziesz bardziej zaangażowany w środowisko JRE, które umożliwia uruchamianie tych programów.

W większości przypadków na komputerze będzie zainstalowana Java, a środowisko JRE zostanie dołączone. Jeśli kiedykolwiek zajdzie potrzeba ręcznej instalacji lub aktualizacji, możesz pobrać aktualną wersję środowiska JRE z Oracle.

Wersje JRE

Środowisko Java Runtime Environment jest aktualizowane dla każdej nowej wersji Java, a jego numery wersji są zgodne z systemem obsługi wersji platformy Java, więc na przykład JRE 1.8 obsługuje Javę 8. Chociaż masz do wyboru wiele różnych pakietów JDK (takich jak Enterprise Edition lub Standard Edition), tak nie jest w przypadku środowiska JRE. Na większości komputerów działa środowisko JRE opracowane dla języka Java SE, które może uruchamiać dowolną aplikację Java niezależnie od tego, w jaki sposób została opracowana. Większość urządzeń przenośnych zawiera środowisko JRE dla języka Java ME, które jest wstępnie zainstalowane na urządzeniu przenośnym i nie jest dostępne do pobrania.

Po zainstalowaniu środowiska JRE możesz wchodzić z nim w interakcję w wierszu poleceń, wpisując  java -version, co powie Ci, jaka wersja jest zainstalowana. W systemach POSIX zawsze możesz sprawdzić zainstalowaną lokalizację za pomocą which java.

Środowisko JRE w DevOps

Środowisko JRE nie jest zbyt zauważalne na etapie rozwoju, gdzie głównie uruchamia programy w wybranym systemie operacyjnym lub IDE. Środowisko JRE odgrywa nieco bardziej znaczącą rolę w DevOps i administrowaniu systemami, ponieważ jest używane do monitorowania i konfiguracji.

Zasadniczo środowisko JRE udostępnia „pokrętła”, których można używać do konfigurowania i kontrolowania właściwości aplikacji Java. Wykorzystanie pamięci jest najlepszym przykładem, chlebem powszednim w administrowaniu systemami. Chociaż użycie pamięci jest zawsze ważne, ma kluczowe znaczenie w konfiguracjach chmurowych, a devops to technologia oparta na chmurze. Jeśli pracujesz w środowisku DevOps lub chcesz przejść na DevOps, dobrze jest zrozumieć, jak działa pamięć Java i jak jest monitorowana w środowisku JRE.

Devops czy sysadmin?

Devops to nowy termin, ale opisuje coś, co było prawdą od dziesięcioleci, czyli interoperacyjność między programowaniem a operacjami. W tym sensie devops to po prostu nowszy termin określający to, co nazywano operacjami lub administracją systemami. Podobnie jak sysadmin, ważnym aspektem devops jest administrowanie systemami niezbędnymi do wykonywania oprogramowania. Zarządzanie środowiskiem JRE jest częścią zarządzania systemami, w których działają aplikacje Java.

Pamięć Java i JRE

Pamięć Java składa się z trzech komponentów: sterty, stosu i metaprzestrzeni (wcześniej nazywanej permgen).

  • Metaspace to miejsce, w którym Java przechowuje niezmienne informacje o programie, takie jak definicje klas.
  • Miejsce na stercie to miejsce, w którym Java przechowuje zmienną zawartość.
  • Przestrzeń stosu to miejsce, w którym Java przechowuje wykonanie funkcji i odwołania do zmiennych.

Zarządzanie pamięcią w Javie 8

Aż do wersji Java 8 metaprzestrzeń była znana jako permgen. Oprócz tego, że jest znacznie fajniejszą nazwą, metaspace jest znaczącą zmianą w sposobie interakcji programistów z przestrzenią pamięci Javy. Wcześniej polecenie java -XX:MaxPermSizesłużyło do monitorowania rozmiaru przestrzeni permgen. Począwszy od Java 8, Java automatycznie zwiększa rozmiar metaprzestrzeni, aby dostosować się do metapotrzeb programu. Java 8 wprowadziła również nową flagę, MaxMetaspaceSizektórej można użyć do ograniczenia rozmiaru metaprzestrzeni.

Inne opcje pamięci, sterta i stos, pozostają takie same w Javie 8.

Konfigurowanie miejsca na sterty

Przestrzeń na stercie jest najbardziej dynamiczną częścią systemu pamięci Java. Możesz użyć flag -Xmsi, -Xmxaby powiedzieć Javie, jak duży ma rozpocząć się sterta i jak duży ma się stać. Zrozumienie, jak dostroić te flagi do określonych potrzeb programu, jest ważnym aspektem zarządzania pamięcią w języku Java. Ideałem jest, aby sterta była wystarczająco duża, aby uzyskać najbardziej wydajne usuwanie śmieci. Oznacza to, że chcesz zapewnić wystarczającą ilość pamięci, aby program mógł działać, ale nie chcesz, aby był większy niż to konieczne.

Konfigurowanie miejsca na stosie

Przestrzeń stosu to miejsce, w którym wywołania funkcji i odwołania do zmiennych są umieszczane w kolejce. Przestrzeń stosu jest źródłem drugiego najbardziej znanego błędu w programowaniu w języku Java: wyjątku przepełnienia stosu (pierwszy to wyjątek wskaźnika zerowego). Wyjątek przepełnienie stosu wskazuje, że już zabrakło miejsca na stosie, ponieważ zbyt wiele zostało zastrzeżone. Zazwyczaj dochodzi do przepełnienia stosu, gdy metoda lub metody wywołują się nawzajem w sposób cykliczny, w ten sposób poświęcając stale rosnącą liczbę wywołań funkcji na stos.

Użyj -Xssprzełącznika, aby skonfigurować rozmiar początkowy stosu. Stos następnie rośnie dynamicznie zgodnie z potrzebami programu.

Monitorowanie aplikacji Java

Chociaż monitorowanie aplikacji jest funkcją maszyny JVM, środowisko JRE zapewnia opcje konfiguracji, które są niezbędną podstawą monitorowania. Dostępnych jest wiele narzędzi do monitorowania aplikacji Java, od klasycznych (takich jak polecenie Unix top) po zaawansowane rozwiązania do zdalnego monitorowania, takie jak monitorowanie infrastruktury Oracle.

Pomiędzy tymi opcjami znajdują się wizualne profilery, takie jak VisualVM, które umożliwiają inspekcję działającej maszyny JVM. Narzędzia te umożliwiają śledzenie hotspotów i wycieków pamięci, a także obserwowanie ogólnego zużycia pamięci w systemie.

Wniosek

Java Runtime Environment to program na dysku, który ładuje aplikacje Java do wykonania przez maszynę JVM. Podczas pobierania pakietu Java Development Kit domyślnie dołączane jest środowisko JRE, a każde środowisko JRE zawiera podstawowe biblioteki klas Java, moduł ładujący klasy języka Java i wirtualną maszynę języka Java. Warto zrozumieć, jak współdziałają maszyny JVM, JDK i JRE, szczególnie w przypadku pracy w chmurze i środowiskach DevOps. W tych środowiskach środowisko JRE odgrywa większą rolę w monitorowaniu i konfigurowaniu niż w przypadku tradycyjnego tworzenia aplikacji Java.

Artykuł „Co to jest JRE? Wprowadzenie do środowiska Java Runtime Environment” został pierwotnie opublikowany przez JavaWorld.