Что такое JVM? Знакомство с виртуальной машиной Java


Виртуальная машина Java - это программа, целью которой является выполнение других программ. JVM нарушила статус-кво для своего времени, и продолжает поддерживать инновации программирования сегодня.

Использование и определения для JVM

JVM имеет две основные функции: разрешить запуск программ Java на любом устройстве или операционной системе (известный как " Написано однажды — работает везде " принцип), а также для управления и оптимизации памяти программы. Когда Java была выпущена в 1995 году, все компьютерные программы писались под конкретную операционную систему, а память программы управлялась разработчиком программного обеспечения. Так что JVM была откровением.

высокоуровневое представление JVM
Рисунок 1: высокоуровневое представление JVM

Есть несколько определений JVM.

  • Техническое определение: JVM – это спецификация для программного обеспечения, которое выполняет код и обеспечивает среду выполнения для этого кода.

  • Обиходное определение: JVM – это то, где мы запускаем наши программы Java. Мы настраиваем параметры JVM, а затем полагаемся на него для управления ресурсами программы во время выполнения.
Когда разработчики говорят о JVM, мы обычно имеем в виду процесс, работающий на компьютере, особенно на сервере, который представляет и контролирует использование ресурсов для Java-приложения. Сравните это с JVM в спецификации, которая описывает требования к созданию программы, которая выполняет эти задачи.

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

Наиболее распространено взаимодействие с запущенной виртуальной машиной, для проверки использования памяти в куче и стека. Самой частой регулировка настройки виртуальной машины - это памятя.

Сборка мусора

До Java, вся память программы управлялась программистом. В Java, память программы управляется JVM. JVM управляет памятью посредством процесса, называемого сборщик мусора, который постоянно выявляет и устраняет неиспользуемые памяти в Java-программы. Сбор мусора происходит внутри работающей JVM.

В первые дни Java подвергалась критике за то, что не была так "близка к железу", как C++, и, следовательно, не так быстра. Процесс сбора мусора был особенно спорным. С тех пор были предложены и использованы различные алгоритмы и подходы для сбора мусора. Благодаря последовательной разработке и оптимизации, сборка мусора значительно улучшилась.

Что значит "близка к железу "?

Когда программисты говорят, что язык программирования или платформа "близки к железу", мы имеем в виду, что разработчик может программно (путем написания кода) управлять памятью операционной системы. В теории, программисты могут отжать больше производительности из наших программ, оговаривая, сколько используется и когда отбросить её. В большинстве случаев делегирование управления памятью высокоточному процессу, такому как JVM, повышает производительность и уменьшает количество ошибок, чем сам процесс.

JVM в трех частях

Можно сказать, что у JVM есть три аспекта: Спецификация, реализация и экземпляр. Давайте рассмотрим каждый из них.

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

Во-первых, в JVM - это программная спецификация. Интересно, что в JVM спецификации подчеркивается, что его реализация деталей не определена, для того чтобы обеспечить максимальную креативность. Чтобы реализовать виртуальную машину Java правильно, нужно только уметь читать class формат файла и правильно выполнять операции, указанные в нем.

Иоганн Себастьян Бах однажды описал создание музыки аналогично: "Все, что вам нужно сделать, это коснуться нужной клавиши в нужное время."

Таким образом, все, что JVM должен сделать, это правильно запустить программы Java. Звучит просто, выглядит простой снаружи, но это масштабная задача, особенно учитывая мощь и гибкость языка Java.

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

JVM представляет собой виртуальную машину, которая запускает Java class файлы портативным способом. Быть виртуальной машиной означает, что JVM - это абстракция базовой, реальной машины, такой как сервер, на котором работает ваша программа. Независимо от того, какая операционная система или оборудование на самом деле присутствует, JVM создает предсказуемую среду для программ, чтобы работать внутри. Однако, в отличие от истинной виртуальной машины, JVM не создает виртуальную операционную систему. Более точно назвать JVM управляемой средой выполнения или процессом виртуальной машины.

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

На самом деле есть много реализаций JVM-машин, с открытым исходным кодом и проприетарные. HotSpot JVM является эталонной реализацией, и остается одной из самых тщательно проверенных сборок в мире. HotSpot также является наиболее часто используемым JVM.

Почти все лицензированные JVM создаются как forks от OpenJDK и HotSpot JVM, включая лицензированный Jdk Oracle. Разработчики, создающие лицензированный fork от OpenJDK, часто мотивированы желанием добавить улучшения производительности для ОС.

3. Экземпляр JVM

После того, как jvm spec был внедрен и выпущен как программный продукт, вы можете загрузить и запустить его как программу. Эта загруженная программа является экземпляром JVM.

Большую часть времени, когда разработчики говорят о "JVM", мы имеем в виду экземпляр JVM, работающий в среде разработки программного обеспечения или производственной среде. Вы можете сказать: "Эй, сколько памяти использует JVM на этом сервере?" или ", не могу поверить, что я создал циклический вызов, и ошибка переполнения стека разбила мою JVM. Какая новенькая ошибка!

Что такое спецификация программного обеспечения?

Под спецификацией программного обеспечения подразумевается удобочитаемое оформление документа, который описывает, как программная система должна работать. Цель спецификации состоит в том, чтобы создать четкое описание и требования к программистам.

Загрузка и выполнение файлов классов в JVM

Мы говорили о роли JVM в работе Java-приложений, но как она выполняет свою функцию? Для запуска приложений Java JVM зависит от загрузчика класса Java и механизма выполнения Java.

Загрузчик класса Java в JVM

Все в Java является классом, и все приложения Java построены из классов. Приложение может состоять из одного класса или тысячи. Для запуска приложения Java JVM должен загрузить скомпилированные файлы класса в контекст, например сервер, где они могут быть доступны. JVM зависит от его загрузчика класса для выполнения этой функции.

На Ява загрузчик класса является частью JVM, который загружает классы в памяти и делает их доступными для исполнения. Загрузчики классов используют такие методы, как ленивая загрузка (Lazy loading ) и кэширование, чтобы сделать загрузку классов максимально эффективной.

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

Механизм выполнения JVM

Как только загрузчик классов выполнит свою работу по загрузке классов, JVM начнет выполнять код в каждом классе. Механизм выполнения является компонентом JVM, который обрабатывает эту функцию. Механизм выполнения необходим для работающей виртуальной машины Java. Фактически, для всех практических целей это экземпляр JVM.

Выполнение кода включает управление доступом к системным ресурсам. Механизм выполнения JVM стоит между работающей программой-с ее запросами на файловые, сетевые ресурсы и ресурсы памяти и операционной системой, которая поставляет эти ресурсы.

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

Системные ресурсы можно разделить на две широкие категории: память и все остальное.

Напомним, что JVM отвечает за утилизацию неиспользуемой памяти, и что сборка мусора является механизмом, который выполняет эту утилизацию. JVM тоже отвечает за выделение и сохранение ссылочной структуры.

Кроме памяти, обработчик выполнения управляет ресурсами для доступа к файловой системе и сетевого ввода-вывода. так как JVM взаимодействует между операционными системами, это не является средней задачей. В дополнение к потребностям ресурсов каждого приложения механизм выполнения должен реагировать на каждую среду ОС. Вот как JVM может справиться с дикими требованиями.

JVM эволюция: прошлое, настоящее, будущее

В 1995 году JVM представила две революционные концепции, которые с тех пор стали стандартом для современной разработки программного обеспечения: "написать один раз, работать в любом месте" и автоматическое управление памятью. Совместимость программного обеспечения была смелой концепцией в то время, но мало кто из разработчиков сегодня будет дважды думать об этом. Точно так же, в то время как наши инженерные предки должны были сами управлять памятью программы, мое поколение выросло со сборкой мусора.

Можно сказать, что Джеймс Гослинг и Брендан Эйх изобрели современное программирование, но тысячи других усовершенствовали и построили свои идеи на протяжении следующих десятилетий. В то время как Виртуальная машина Java изначально была только для Java, сегодня она развилась для поддержки многих скриптовых и языков программирования, включая Scala, Groovy и Kotlin. Смотря вперед, трудно увидеть будущее без JVM.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегистатьи IT, java, Изучайте Java, Java App Dev, jvm
Читайте также:




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Анализ алгоритмов: теория
Принцип единой ответственности (SRP)
Онлайн помощь с OpenCart