Какво представлява JVM? Представяме виртуалната машина Java

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

За какво се използва JVM

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

JavaWorld /

Наличието на техническа дефиниция за JVM е полезно и има и ежедневен начин, по който разработчиците на софтуер мислят за това. Нека да ги разделим:

  • Техническа дефиниция : JVM е спецификацията за софтуерна програма, която изпълнява код и осигурява среда за изпълнение за този код.
  • Ежедневна дефиниция : JVM е начина, по който стартираме нашите Java програми. Конфигурираме настройките на JVM и след това разчитаме на него за управление на програмните ресурси по време на изпълнение.

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

Кой разработва и поддържа JVM?

JVM е широко внедрен, широко използван и поддържан от някои много ярки програмисти, както корпоративни, така и с отворен код. Проектът OpenJDK е рожба на решението на Sun Microsystems за Java с отворен код. OpenJDK продължи чрез управлението на Oracle на Java, като голяма част от тежките дела в наши дни бяха направени от инженерите на Oracle.

Управление на паметта в JVM

Най-честото взаимодействие с работещ JVM е да се провери използването на паметта в купчината и стека. Най-честата настройка е настройването на настройките на паметта на JVM.

Събиране на боклук

Преди Java, цялата програмна памет се управляваше от програмиста. В Java програмната памет се управлява от JVM. JVM управлява паметта чрез процес, наречен събиране на боклук , който непрекъснато идентифицира и елиминира неизползваната памет в Java програмите. Събирането на боклука се случва в работещ JVM.

В ранните дни Java беше подложена на много критики, че не е „близо до метала“ като C ++ и следователно не е толкова бърза. Процесът на събиране на боклука беше особено спорен. Оттогава са предложени и използвани разнообразни алгоритми и подходи за събиране на боклука. С последователното разработване и оптимизиране, събирането на боклука се подобри значително.

Какво означава „близо до метала“?

Когато програмистите казват, че езикът за програмиране или платформата са „близо до метала“, ние имаме предвид, че разработчикът може програмно (чрез писане на код) да управлява паметта на операционната система. На теория програмистите могат да изтласкат повече производителност от нашите програми, като определят колко се използва и кога да го изхвърлят. В повечето случаи делегирането на управление на паметта на силно усъвършенстван процес като JVM дава по-добра производителност и по-малко грешки, отколкото да го направите сами.

JVM в три части

Може да се каже, че има три аспекта на JVM: спецификация, изпълнение и екземпляр. Нека разгледаме всеки един от тях.

1. Спецификацията на JVM

Първо, JVM е софтуерна спецификация. По някакъв кръгов начин спецификацията на JVM подчертава, че подробностите за нейното изпълнение не са дефинирани в спецификацията, за да се даде възможност за максимална креативност при нейното осъществяване:

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

JS Bach веднъж описал създаването на музика по подобен начин:

„Всичко, което трябва да направите, е да докоснете правилния клавиш в точното време.“

И така, всичко, което JVM трябва да направи, е да стартира правилно Java програми. Звучи просто, може дори да изглежда просто отвън, но това е огромно начинание, особено като се има предвид силата и гъвкавостта на езика Java.

JVM като виртуална машина

JVM е виртуална машина, която изпълнява файлове от клас Java по преносим начин. Това, че е виртуална машина, означава, че JVM е абстракция от основна, действителна машина - например сървъра, на който работи вашата програма. Независимо от това каква операционна система или хардуер всъщност присъства, JVM създава предсказуема среда за изпълнение на програми. За разлика от истинската виртуална машина обаче, JVM не създава виртуална операционна система. По-точно би било да се опише JVM като управлявана среда за изпълнение или като виртуална машина на процеса .

2. Реализации на JVM

Внедряването на спецификацията JVM води до действителна софтуерна програма, която е реализация на JVM. Всъщност има много реализации на JVM, както с отворен код, така и с патентовани. HotSpot JVM на OpenJDK е референтната реализация и остава една от най-старателно изпитаните кодови бази в света. HotSpot е и най-често използваният JVM.

Почти всички лицензирани JVM са създадени като разклонения на OpenJDK и HotSpot JVM, включително лицензирания JDK на Oracle. Разработчиците, създаващи лицензиран разклонител от OpenJDK, често са мотивирани от желанието да добавят подобрения на производителността, специфични за OS. Обикновено изтегляте и инсталирате JVM като пакетна част от Java Runtime Environment (JRE).

3. Екземпляр на JVM

След като спецификацията на JVM бъде внедрена и пусната като софтуерен продукт, можете да я изтеглите и стартирате като програма. Тази изтеглена програма е екземпляр (или инстанцирана версия) на JVM.

По-голямата част от времето, когато разработчиците говорят за „JVM“, ние се позоваваме на екземпляр на JVM, работещ в среда за разработка на софтуер или производство. Може да кажете: "Хей Ананд, колко памет използва JVM на този сървър?" или „Не мога да повярвам, че създадох циркулярно обаждане и грешка при препълване на стека разби моята JVM. Каква нова грешка!“

Какво представлява спецификацията на софтуера?

А спецификация софтуер (или спец) е четимо дизайн документ, който описва как следва да прилагат система софтуер. Целта на спецификацията е да създаде ясно описание и изисквания за инженерите да кодират.

Зареждане и изпълнение на файлове на класа в JVM

Говорихме за ролята на JVM в стартирането на Java приложения, но как изпълнява функцията си? За да стартира Java приложения, JVM зависи от зареждащия Java клас и механизма за изпълнение на Java.

Зареждачът на Java клас в JVM

Всичко в Java е клас и всички Java приложения са изградени от класове. Приложението може да се състои от един клас или хиляди. За да стартира Java приложение, JVM трябва да зареди компилирани .class файлове в контекст, като сървър, където те могат да бъдат достъпни. JVM зависи от своя клас товарач, за да изпълнява тази функция.

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

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

Изпълнителният механизъм в JVM

След като зареждащият клас свърши работата си по зареждането на класовете, JVM започва да изпълнява кода във всеки клас. В двигателя изпълнение е JVM компонент, който обработва тази функция. Двигателят за изпълнение е от съществено значение за работещия JVM. Всъщност за всички практически цели това е екземпляр на JVM.

Изпълнението на код включва управление на достъпа до системни ресурси. Двигателят за изпълнение на JVM стои между работещата програма - с нейните изисквания за файлови, мрежови и памет ресурси - и операционната система, която ги доставя.

Как механизмът за изпълнение управлява системните ресурси

Системните ресурси могат да бъдат разделени на две широки категории: памет и всичко останало.

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

Освен паметта, механизмът за изпълнение управлява ресурси за достъп до файлова система и мрежови вход / изход. Тъй като JVM е оперативно съвместим между операционните системи, това не е никаква основна задача. В допълнение към нуждите от ресурси на всяко приложение, механизмът за изпълнение трябва да отговаря на всяка среда на ОС. Ето как JVM е в състояние да се справи с дивите изисквания.

Еволюция на JVM: Минало, настояще, бъдеще

През 1995 г. JVM въведе две революционни концепции, които оттогава се превърнаха в стандартна тарифа за модерна разработка на софтуер: „Пиши веднъж, тичай навсякъде“ и автоматично управление на паметта. По това време софтуерната оперативна съвместимост беше смела концепция, но малко разработчици днес биха помислили два пъти за това. По същия начин, докато нашите инженерни предшественици трябваше сами да управляват програмната памет, моето поколение израсна със събирането на боклука.

Можем да кажем, че Джеймс Гослинг и Брендън Айх са изобретили модерно програмиране, но хиляди други са усъвършенствали и надграждали своите идеи през следващите десетилетия. Докато първоначално виртуалната машина Java е била само за Java, днес тя се е развила, за да поддържа много езици за скриптове и програмиране, включително Scala, Groovy и Kotlin. Очаквайки напред, е трудно да се види бъдеще, където JVM не е важна част от пейзажа на развитието.

Всичко за JVM

  • Предизвикатели на Java: Поведение на нишките в JVM
  • Предизвикатели на Java: Претоварване на метода в JVM
  • Вътрешна оптимизация на производителността на JVM
  • Основи на байт кода: Как JVM борави с байт кода
  • Java изключения: Как JVM се справя с изключенията
  • Представяме ви виртуалната машина на Java

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