Какво представлява JRE? Въведение в Java Runtime Environment

Заедно Java Development Kit (JDK), Java Virtual Machine (JVM) и Java Runtime Environment (JRE) формират мощна трифекта от компоненти на платформата Java за разработване и стартиране на Java приложения. Преди това съм представил JDK и JVM. В този бърз урок ще научите за JRE, която е средата на изпълнение за Java.

Практически погледнато, среда за изпълнение е софтуер, който е проектиран да работи с друг софтуер. Като среда за изпълнение на Java, JRE съдържа библиотеки на класове Java, зареждащ клас Java и виртуална машина Java. В тази система:

  • Най- товарач клас е отговорен за правилно зареждане на класове и ги свързва с основните библиотеки на Java клас.
  • В JVM е отговорна за гарантиране на Java приложения имат необходимите средства, за да се движи и се представят добре в устройството или облак среда.
  • В JRE е главно контейнер за тези други компоненти, и е отговорен за организирането на дейността им.

Ще разгледаме много по-задълбочено как тези компоненти работят заедно в следващите раздели.

Инсталиране на JDK, JRE и JVM

От гледна точка на инсталацията, всеки път, когато изтеглите JDK, той ще включва съвместим с версията JRE и този JRE ще включва JVM по подразбиране. Можете също да изтеглите JRE отделно от JDK и можете да избирате от различни JVM. По подразбиране работят добре за повечето внедрения, особено когато започвате с Java.

Какво е среда за изпълнение?

Софтуерната програма трябва да се изпълни и за това се нуждае от среда, в която да се изпълнява. Времето за изпълнение зарежда файловете на класа и гарантира, че има достъп до паметта и други системни ресурси за тяхното стартиране. В миналото повечето софтуер използваха операционната система (OS) като среда за изпълнение. Програмата работи в който и да е компютър, но разчита на настройките на операционната система за достъп до ресурси. Ресурси в този случай биха били неща като памет и програмни файлове и зависимости. Java Runtime Environment промени всичко това, поне за Java програми.

WORA за Java

Когато беше представен за първи път, принципът на Java „пиши веднъж, тичай навсякъде“ се смяташе за революционен, но днес той беше приет като норма за повечето софтуерни системи.

Средата на изпълнение на Java

Можем да разглеждаме софтуера като поредица от слоеве, които стоят на върха на системния хардуер. Всеки слой предоставя услуги, които ще се използват (и изискват) от слоевете над него. Java Runtime Environment е софтуерен слой, който работи върху операционната система на компютъра, като предоставя допълнителни услуги, специфични за Java.

JRE изглажда разнообразието от операционни системи, гарантирайки, че Java програмите могат да работят на почти всяка операционна система без модификация. Той също така предоставя услуги с добавена стойност. Автоматичното управление на паметта е една от най-важните услуги на JRE, което гарантира, че програмистите не трябва да контролират ръчно разпределението и преразпределението на паметта.

Накратко, JRE е нещо като мета-OS за Java програми. Това е класически пример за абстракция , абстрахиране на основната операционна система в последователна платформа за стартиране на Java приложения.

Как работи JRE с JVM

Java Virtual Machine е работеща софтуерна система, отговорна за изпълнението на Java програми на живо. JRE е системата на диска, която приема вашия Java код, комбинира го с необходимите библиотеки и стартира JVM, за да го изпълни.

JRE съдържа библиотеки и софтуер, които вашите Java програми трябва да изпълняват. Като пример, зареждащият клас Java е част от Java Runtime Environment. Тази важна част от софтуера зарежда компилирания Java код в паметта и свързва кода с подходящите библиотеки на Java клас.

В слоевия изглед, който току-що описах, JVM е създаден от JRE. От гледна точка на пакета JRE съдържа JVM, както е показано на Фигура 1.

Матю Тайсън

Инсталиране и използване на JRE

Въпреки че има концептуална страна на JRE, в реалната практика това е просто софтуер, инсталиран на компютър, чиято цел е да стартира вашите Java програми. Като разработчик най-вече ще работите с JDK и JVM, защото това са компонентите на платформата, които използвате за разработване и стартиране на вашите Java програми. Като потребител на приложение на Java, ще бъдете по-ангажирани с JRE, който ви позволява да стартирате тези програми.

В повечето случаи компютърът ви ще бъде инсталиран с Java и JRE ще бъде включен в това. Ако някога се наложи ръчно да инсталирате или надстроите, можете да изтеглите текущата версия на JRE от Oracle.

JRE версии

Java Runtime Environment се актуализира за всяка нова версия на Java и номерата на версиите й се привеждат в съответствие с версионната система на платформата Java, така че например JRE 1.8 изпълнява Java 8. Докато имате различни JDK пакети, от които можете да избирате (като Enterprise Edition или Standard Edition), което не е случаят с JRE. Повечето компютри изпълняват JRE, разработен за Java SE, който може да изпълнява всяко приложение на Java, независимо от това как е разработено. Повечето мобилни устройства се доставят с JRE за Java ME, който е предварително инсталиран на мобилното устройство и не е наличен за изтегляне.

След като JRE бъде инсталиран, можете да взаимодействате с него в командния ред, като въведете  java -version, което ще ви каже каква версия е инсталирана. На POSIX системите винаги можете да проверите инсталираното местоположение с which java.

JRE в devops

JRE не е много забележим на етапа на разработка, където най-вече просто изпълнява вашите програми в избраната от вас OS или IDE. JRE играе малко по-видна роля в devops и системното администриране, защото се използва за наблюдение и конфигуриране.

По принцип JRE предоставя "бутоните", които бихте използвали за конфигуриране и контрол на характеристиките на Java приложение. Използването на памет е отличен пример, хлябът и маслото на системното администриране. Въпреки че използването на паметта е винаги важно, това е жизненоважно при конфигурациите в облак, а devops е облачна технология. Ако работите в среда на devops или се интересувате от разклоняване на devops, добра идея е да разберете как работи Java паметта и как се наблюдава в JRE.

Devops или sysadmin?

Devops е нов термин, но той описва нещо, което е вярно от десетилетия, а именно оперативната съвместимост между разработката и операциите. В този смисъл devops е просто по-нов термин за това , което навремето се наричаше операция или администриране на системи. Подобно на sysadmin, важен аспект на devops е администрирането на системите, необходими за изпълнение на софтуера. Управлението на JRE е част от управлението на системи, които изпълняват Java приложения.

Java памет и JRE

Java паметта се състои от три компонента: купчината, стека и метапространството (което преди се наричаше permgen).

  • Metaspace е мястото, където Java поддържа неизменната информация на вашата програма като дефиниции на класове.
  • Куп място е мястото, където Java съхранява променливо съдържание.
  • Пространството на стека е мястото, където Java съхранява изпълнението на функции и референциите на променливи.

Управление на паметта в Java 8

До Java 8 метапространството е било известно като permgen. Освен много по-хладно име, метапространството е съществена промяна в начина, по който разработчиците взаимодействат с пространството на паметта на Java. Преди това щяхте да използвате командата, за java -XX:MaxPermSizeда наблюдавате размера на пермгенното пространство. От Java 8 напред Java автоматично увеличава размера на метапространството, за да приспособи мета-нуждите на вашата програма. Java 8 също представи нов флаг, MaxMetaspaceSizeкойто може да се използва за ограничаване на размера на метапространството.

Другите опции за памет, купчина и стек, остават същите в Java 8.

Конфигуриране на куп място

Пространството на купчината е най-динамичната част от системата с памет Java. Можете да използвате -Xmsи -Xmxфлаговете, за да кажете на Java колко голяма да стартира купчината и колко голяма, за да стане възможно. Разбирането как да настроите тези флагове за специфични нужди на програмата е важен аспект от управлението на паметта в Java. Идеалното е да направите купчината достатъчно голяма, за да постигнете най-ефективното събиране на боклука. Тоест искате да позволите достатъчно памет, за да може програмата да работи, но не искате тя да бъде по-голяма от необходимото.

Конфигуриране на пространството на стека

Пространството на стека е мястото, където извикванията на функции и препратките към променливи са на опашка. Пространството на стека е източникът на втората най-известна грешка в програмирането на Java: изключението за препълване на стека (първото е изключението за нулев указател). Най изключение стека преливане показва, че сте се изчерпи стека пространство, защото прекалено много от него, не са запазени. Обикновено ще получите препълване на стека, когато метод или методи се извикват взаимно, като по този начин отделяте постоянно нарастващия брой извиквания на функции в стека.

Използвате -Xssпревключвателя, за да конфигурирате началния размер на стека. След това стекът нараства динамично според нуждите на програмата.

Мониторинг на Java приложения

Въпреки че мониторингът на приложения е функция на JVM, JRE предоставя опции за конфигуриране, които са необходимата базова линия за наблюдение. Налични са разнообразни инструменти за наблюдение на Java приложения, от класическите (като командата Unix top) до сложните решения за дистанционно наблюдение като мониторинг на инфраструктурата на Oracle.

Между тези опции има визуални профили като VisualVM, които позволяват проверка на работещ JVM. Тези инструменти позволяват проследяване на горещи точки и изтичане на памет, както и наблюдение на общото потребление на памет във вашата система.

Заключение

Java Runtime Environment е дисковата програма, която зарежда Java приложения за изпълнение на JVM. JRE е включен по подразбиране, когато изтеглите Java Development Kit, и всеки JRE включва основните библиотеки на Java клас, зареждащ Java клас и Java виртуална машина. Полезно е да разберете как си взаимодействат JVM, JDK и JRE, особено за работа в облачни и devops среди. В тези среди JRE играе по-силна роля в наблюдението и конфигурирането, отколкото при традиционното разработване на Java приложения.

Тази история „Какво представлява JRE? Въведение в средата за изпълнение на Java“ първоначално е публикувана от JavaWorld.