что такое java virtual machine

Виртуальная машина Java: установка и запуск Java Virtual Machine

Содержание

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

Что такое виртуальная машина Java?

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

Кроме того, поддержка этой платформы активно используется практически во всех мобильных телефонах, несмотря даже на наличие в них собственных операционных систем. Вы когда-нибудь обращали внимание на то, что на стареньких телефонах, в которых не было современных ОС вроде Android или iOS, можно было запросто устанавливать приложения (чаще всего игры) из файлов формата JAR и JAD? Именно поддержка Java и позволяла это сделать. И сегодня такая поддержка имеется во всех мобильных системах.

Наконец, отдельно стоит отметить, что виртуальная машина Java Virtual Machine крайне необходима многим программистам и веб-дизайнерам для разработки собственных апплетов и приложений. Таким образом, становится совершенно очевидно, что иметь ее на своем компьютере необходимо в любом случае.

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

Предварительная проверка установленной версии

Для начала давайте проверим, установлена в вашей системе среда Java VM. Для проверки вызовите командную консоль (cmd) любым удобным для вас методом (необязательно от имени администратора), а затем задайте на выполнение команду java –version.

что такое java virtual machine. Смотреть фото что такое java virtual machine. Смотреть картинку что такое java virtual machine. Картинка про что такое java virtual machine. Фото что такое java virtual machine

Если среда установлена, отобразится информация, показанная на изображении выше, где первостепенное внимание следует обратить на версию платформы. Поскольку ее обновление в автоматическом режиме даже при установке апдейтов для самих Windows-систем производится не всегда, настоятельно рекомендуется выполнить такое обновление вручную путем загрузки необходимого контента с официальных ресурсов и последующей самостоятельно инсталляции.

Что нужно для работы?

А вообще отдельно стоит сказать, что Java Virtual Machine представляет собой только один из множества компонентов всей платформы. Так, тем, кто занимается созданием приложений, необходимо установить специализированный пакет разработчика JDK (Java Development Kit), а обычному пользователю будет достаточно только наличия исполняемой среды JRE, где создавать собственные апплеты будет невозможно, зато появится возможность запуска и использования уже готовых программ, написанный на Java. А вот если вы хотите стать квалифицированным разработчиком, может понадобиться подобрать для себя комплект IDE (на данный момент наиболее распространенными и рекомендуемыми к установке и использованию являются Eclipse и NetBeans).

Где и что скачивать для инсталляции в Windows?

что такое java virtual machine. Смотреть фото что такое java virtual machine. Смотреть картинку что такое java virtual machine. Картинка про что такое java virtual machine. Фото что такое java virtual machine

Что же касается загрузки компонентов, необходимых для установки или обновления виртуальной машины Java, можете посетить сайт java.com, где в разделе загрузок сразу будет предложено загрузить установщик, соответствующий вашей операционной системе.

что такое java virtual machine. Смотреть фото что такое java virtual machine. Смотреть картинку что такое java virtual machine. Картинка про что такое java virtual machine. Фото что такое java virtual machine

Если же вам нужны дополнительные компоненты, можете обратиться к ресурсу oracle.com, где на данный момент доступен полный комплект Java SE (JDK) версии 12, некоторые более ранние модификации платформы и набор NetBeans.

Здесь стоит дать небольшое пояснение, поскольку у многих пользователей могут возникнуть сомнения по поводу того, какой именно комплект скачивать, ведь на сайте представлено целых три модификации! По всей видимости, вам понадобится только версия SE, поскольку EE представляет собой среду разработки, ориентированную на предприятия, а ME – аналогичная платформа для работы с мобильными системами.

Установка виртуальной машины Java

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

что такое java virtual machine. Смотреть фото что такое java virtual machine. Смотреть картинку что такое java virtual machine. Картинка про что такое java virtual machine. Фото что такое java virtual machine

Теперь установщик виртуальной машины Java для Windows 10 (как в приводимом ниже примере) необходимо запустить от имени администратора (если у вас встроенный аккаунт суперпользователя не деактивирован).

что такое java virtual machine. Смотреть фото что такое java virtual machine. Смотреть картинку что такое java virtual machine. Картинка про что такое java virtual machine. Фото что такое java virtual machine

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

что такое java virtual machine. Смотреть фото что такое java virtual machine. Смотреть картинку что такое java virtual machine. Картинка про что такое java virtual machine. Фото что такое java virtual machine

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

Примечание: имейте ввиду, что апплет, отвечающий за отслеживание обновлений, сразу же будет внесен в раздел автозагрузки системы. За ненадобностью можете его отключить, воспользовавшись соответствующим разделом либо в конфигурации (msconfig) для Windows 7, либо в «Диспетчере задач» (taskmgr) для Windows 8 и 10.

Ошибка при создании платформы

Наконец, платформа установлена. Теперь обратим внимание на некоторые сбои и ошибки, которые могут появиться по завершении интеграции компонентов в систему. Самой первой и наиболее распространенной проблемой считается невозможность запуска виртуальной машины Java (для Windows последних поколений такая проблема обычно не наблюдается, а вот в неподдерживаемых более версиях систем вроде XP могут себя проявлять).

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

что такое java virtual machine. Смотреть фото что такое java virtual machine. Смотреть картинку что такое java virtual machine. Картинка про что такое java virtual machine. Фото что такое java virtual machine

В примере указываемое значение соответствует 512 Мб выделяемого объема оперативной памяти, который машине разрешено использовать. При необходимости можете его увеличить.

Ошибка при открытии разделов реестра

Иногда виртуальная машина Java для Windows 7 и выше может выдавать ошибку доступа к реестру, особенно когда она работает посредством командной строки. В этой ситуации необходимо обратиться к каталогу System32 и удалить три исполняемых EXE-файла с такими именами: java, javaw и javaws. После этого нужно просто переустановить среду, используя ранее скачанный файл установщика.

Ошибка поиска основного класса

Еще один сбой, при котором виртуальная машина самопроизвольно и в аварийном режиме завершает работу, может быть устранен следующим способом.

что такое java virtual machine. Смотреть фото что такое java virtual machine. Смотреть картинку что такое java virtual machine. Картинка про что такое java virtual machine. Фото что такое java virtual machine

Сначала запустите средство поиска и удаления вредоносных программ, вписав в консоли «Выполнить» команду mrt, нажмите кнопку продолжения, а затем выберите полное сканирование. По окончании процесса полностью перезагрузите систему, затем войдите в конфигурацию (msconfig) или в «Диспетчер задач», после чего деактивируйте в списке компонент автозагрузки под названием WJView.exe. После этого рестарт системы нужно выполнить в обязательном порядке.

Ошибка открытия JAR-файлов

Наконец, ошибка, связанная с невозможностью открытия соответствующих платформе и виртуальной машине объектов формата JAR исправляется следующим способом.

что такое java virtual machine. Смотреть фото что такое java virtual machine. Смотреть картинку что такое java virtual machine. Картинка про что такое java virtual machine. Фото что такое java virtual machine

Источник

Java Virtual Machine

Из Википедии — свободной энциклопедии

JVM
РазработчикSun Microsystems
Разрядность32
Представлена1994
ТипСтековая машина, с выделенным доступом к памяти
Порядок байтовBig-endian
Регистры
Общего назначенияСтек операндов для каждого метода (до 65535 операндов), и локальные переменные метода (до 65535)

что такое java virtual machine. Смотреть фото что такое java virtual machine. Смотреть картинку что такое java virtual machine. Картинка про что такое java virtual machine. Фото что такое java virtual machine

Java Virtual Machine (сокращенно Java VM, JVM) — виртуальная машина Java — основная часть исполняющей системы Java, так называемой Java Runtime Environment (JRE). Виртуальная машина Java исполняет байт-код Java, предварительно созданный из исходного текста Java-программы компилятором Java (javac). JVM может также использоваться для выполнения программ, написанных на других языках программирования. Например, исходный код на языке Ada может быть скомпилирован в байт-код Java, который затем может выполниться с помощью JVM.

JVM является ключевым компонентом платформы Java. Так как виртуальные машины Java доступны для многих аппаратных и программных платформ, Java может рассматриваться и как связующее программное обеспечение, и как самостоятельная платформа. Использование одного байт-кода для многих платформ позволяет описать Java как «скомпилируй единожды, запускай везде» (compile once, run anywhere).

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

Источник

Инструменты для запуска и разработки Java приложений, компиляция, выполнение на JVM

Ни для кого не секрет, что на данный момент Java — один из самых популярных языков программирования в мире. Дата официального выпуска Java — 23 мая 1995 года.

Эта статья посвящена основам основ: в ней изложены базовые особенности языка, которые придутся кстати начинающим “джавистам”, а опытные Java-разработчики смогут освежить свои знания.

* Статья подготовлена на основе доклада Евгения Фраймана — Java разработчика компании IntexSoft.
В статье присутствуют ссылки на внешние материалы
.

что такое java virtual machine. Смотреть фото что такое java virtual machine. Смотреть картинку что такое java virtual machine. Картинка про что такое java virtual machine. Фото что такое java virtual machine

1. JDK, JRE, JVM

Java Development Kit — комплект разработчика приложений на языке Java. Он включает в себя Java Development Tools и среду выполнения Java — JRE (Java Runtime Environment).

Java development tools включают в себя около 40 различных тулов: javac (компилятор), java (лаунчер для приложений), javap (java class file disassembler), jdb (java debugger) и др.

Среда выполнения JRE — это пакет всего необходимого для запуска скомпилированной Java-программы. Включает в себя виртуальную машину JVM и библиотеку классов Java — Java Class Library.

JVM — это программа, предназначенная для выполнения байт-кода. Первое преимущество JVM — это принцип “Write once, run anywhere”. Он означает, что приложение, написанное на Java, будет работать одинаково на всех платформах. Это является большим преимуществом JVM и самой Java.

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

Существует множество реализаций JVM, как коммерческих, так и с открытым кодом. Одна из целей создания новых JVM — увеличение производительности для конкретной платформы. Каждая JVM пишется под платформу отдельно, при этом есть возможность написать ее так, чтобы она работала быстрее на конкретной платформе. Самая распространённая реализация JVM — это JVM Hotspot от OpenJDK. Также есть реализации IBM J9, Excelsior JET.

2. Выполнение кода на JVM

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

3. Загрузчики классов и их иерархия

Вернемся к загрузчикам классов — это специальные классы, которые являются частью JVM. Они загружают классы в память и делают их доступными для выполнения. Загрузчики работают со всеми классами: и с нашими, и с теми, которые непосредственно нужны для Java.

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

Иерархия загрузчиков классов

что такое java virtual machine. Смотреть фото что такое java virtual machine. Смотреть картинку что такое java virtual machine. Картинка про что такое java virtual machine. Фото что такое java virtual machine

Первый загрузчик классов — это Bootstrap classloader. Он написан на C++. Это базовый загрузчик, который загружает все системные классы из архива rt.jar. При этом, есть небольшое отличие между загрузкой классов из rt.jar и наших классов: когда JVM загружает классы из rt.jar, она не выполняет все этапы проверки, которые выполняются при загрузке любого другого класс-файла т.к. JVM изначально известно, что все эти классы уже проверены. Поэтому, включать в этот архив какие-либо свои файлы не стоит.

Следующий загрузчик — это Extension classloader. Он загружает классы расширений из папки jre/lib/ext. Допустим, вы хотите, чтобы какой-то класс загружался каждый раз при старте Java машины. Для этого вы можете скопировать исходный файл класса в эту папку, и он будет автоматически загружаться.

Еще один загрузчик — System classloader. Он загружает классы из classpath’а, который мы указали при запуске приложения.

Процесс загрузки классов происходит по иерархии:

4. Структура Сlass-файлов и процесс загрузки

Перейдем непосредственно к структуре Class-файлов.

Все числа, строки, указатели на классы, поля и методы хранятся в Сonstant pool — области памяти Meta space. Описание класса хранится там же и содержит имя, модификаторы, супер-класс, супер-интерфейсы, поля, методы и атрибуты. Атрибуты, в свою очередь, могут содержать любую дополнительную информацию.

Таким образом, при загрузке классов:

5. Исполнение байт-кода на JVM

В первую очередь, для исполнения байт-кода, JVM может его интерпретировать. Интерпретация — довольно медленный процесс. В процессе интерпретации, интерпретатор “бежит” построчно по класс-файлу и переводит его в команды, которые понятны JVM.

Также JVM может его транслировать, т.е. скомпилировать в машинный код, который будет исполняться непосредственно на CPU.

Команды, которые исполняются часто, не будут интерпретироваться, а сразу будут транслироваться.

6. Компиляция

Компилятор — это программа, которая преобразует исходные части программ, написанные на языке программирования высокого уровня, в программу на машинном языке, “понятную” компьютеру.

Компиляторы делятся на:

Также компиляторы могут классифицироваться по моменту компиляции:

7. Организация памяти в Java

Стек — это область памяти в Java, которая работает по схеме LIFO — “Last in — Fisrt Out” или “Последним вошел, первым вышел”.

что такое java virtual machine. Смотреть фото что такое java virtual machine. Смотреть картинку что такое java virtual machine. Картинка про что такое java virtual machine. Фото что такое java virtual machine

Он нужен для того, чтобы хранить методы. Переменные в стеке существуют до тех пор, пока выполняется метод в котором они были созданы.

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

Ключевые особенности стека:

Куча разбита на несколько более мелких частей, называемых поколениями:

что такое java virtual machine. Смотреть фото что такое java virtual machine. Смотреть картинку что такое java virtual machine. Картинка про что такое java virtual machine. Фото что такое java virtual machine

Почему отказались от Permanent generation? В первую очередь, это из-за ошибки, которая была связана с переполнением области: так как Perm имел константный размер и не мог расширяться динамически, рано или поздно память заканчивалась, кидалась ошибка, и приложение падало.

Meta space же имеет динамический размер, и во время исполнения он может расширяться до размеров памяти JVM.

Ключевые особенности кучи:

Основываясь на информации выше, рассмотрим, как происходит управление памятью на простом примере:

У нас есть класс App, в котором единственный метод main состоит из:

— примитивной переменой id типа int со значением 23
— ссылочной переменной pName типа String со значением Jon
— ссылочной переменной p типа person

что такое java virtual machine. Смотреть фото что такое java virtual machine. Смотреть картинку что такое java virtual machine. Картинка про что такое java virtual machine. Фото что такое java virtual machine

Как уже упоминалось, при вызове метода на вершине стека создаётся область памяти, в которой хранятся данные, необходимые этому методу для выполнения.
В нашем случае, это ссылка на класс person: сам объект хранится в куче, а в стеке хранится ссылка. Также в стек кладется ссылка на строку, а сама строка хранится в куче в String pool. Примитив хранится непосредственно в стеке.

Для вызова конструктора с параметрами Person (String) из метода main() в стеке, поверх предыдущего вызова main() создается в стеке отдельный фрейм, который хранит:

this — ссылка на текущий объект
— примитивное значение id
— ссылочную переменную personName, которая указывает на строку в String Pool.

После того, как мы вызвали конструктор, вызывается setPersonName(), после чего снова создается новый фрейм в стеке, где хранятся те же данные: ссылка на объект, ссылка на строку, значение переменной.

Таким образом, когда выполнится метод setter, фрейм пропадет, стек очистится. Далее выполняется конструктор, очищается фрейм, который был создан под конструктор, после чего метод main() завершает свою работу и тоже удаляется из стека.

Если будут вызваны другие методы, для них будут также созданы новые фреймы с контекстом этих конкретных методов.

8. Garbage collector

В куче работает Garbage collector — программа, работающая на виртуальной машине Java, которая избавляется от объектов, к которым невозможно получить доступ.

Разные JVM могут иметь различные алгоритмы сборки мусора, также существуют разные сборщики мусора.

Мы поговорим о самом простом сборщике Serial GC. Сборку мусора мы запрашиваем при помощи System.gc().

что такое java virtual machine. Смотреть фото что такое java virtual machine. Смотреть картинку что такое java virtual machine. Картинка про что такое java virtual machine. Фото что такое java virtual machine

Как уже было упомянуто выше, куча разбита на 2 области: New generation и Old generation.

New generation (младшее поколение) включает в себя 3 региона: Eden, Survivor 0 и Survivor 1.

Old generation включает в себя регион Tenured.

Что происходит, когда мы создаем в Java объект?

В первую очередь объект попадает в Eden. Если мы создали уже много объектов и в Eden уже нет места, срабатывает сборщик мусора и освобождает память. Это, так называемая, малая сборка мусора — на первом проходе он очищает область Eden и кладёт “выжившие” объекты в регион Survivor 0. Таким образом регион Eden полностью высвобождается.

Если произошло так, что область Eden снова была заполнена, garbage collector начинает работу с областью Eden и областью Survivor 0, которая занята на данный момент. После очищения выжившие объекты попадут в другой регион — Survivor 1, а два остальных останутся чистыми. При последующей сборке мусора в качестве региона назначения опять будет выбран Survivor 0. Именно поэтому важно, чтобы один из регионов Survivor всегда был пустым.

JVM следит за объектами, которые постоянно копируются и перемещаются из одного региона в другой. И для того, чтобы оптимизировать данный механизм, после определённого порога сборщик мусора перемещает такие объекты в регион Tenured.

Когда в Tenured места для новых объектов не хватает, происходит полная сборка мусора — Mark-Sweep-Compact.

что такое java virtual machine. Смотреть фото что такое java virtual machine. Смотреть картинку что такое java virtual machine. Картинка про что такое java virtual machine. Фото что такое java virtual machine

Во время этого механизма определяется, какие объекты больше не используются, регион очищается от этих объектов, и область памяти Tenured дефрагментируется, т.е. последовательно заполняется нужными объектами.

Источник

Внутренности JVM, Часть 1 — Загрузчик классов

Перевод статьи подготовлен специально для студентов курса «Разработчик Java».

что такое java virtual machine. Смотреть фото что такое java virtual machine. Смотреть картинку что такое java virtual machine. Картинка про что такое java virtual machine. Фото что такое java virtual machine

В этой серии статей я расскажу о том, как работает Java Virtual Machine. Сегодня мы рассмотрим механизм загрузки классов в JVM.

Виртуальная машина Java — это сердце экосистемы Java-технологий. Она делает для Java-программ возможность реализации принципа «написано один раз, работает везде» (write once run everywhere). Как и другие виртуальные машины, JVM представляет собой абстрактный компьютер. Основная задача JVM — загружать class-файлы и выполнять содержащийся в них байт-код.

В состав JVM входят различные компоненты, такие как загрузчик классов (Classloader), сборщик мусора (Garbage Collector) (автоматическое управление памятью), интерпретатор, JIT-компилятор, компоненты управления потоками. В этой статье рассмотрим загрузчик классов (Class loader).

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

Байт-код выполняется подсистемой исполнения (execution engine).

что такое java virtual machine. Смотреть фото что такое java virtual machine. Смотреть картинку что такое java virtual machine. Картинка про что такое java virtual machine. Фото что такое java virtual machine

Что такое загрузка классов?

Загрузка классов — это поиск и загрузка типов (классов и интерфейсов) динамически во время выполнения программы. Данные о типах находятся в бинарных class-файлах.

Этапы загрузки классов

Подсистема загрузчика классов отвечает не только за поиск и импорт бинарных данных класса. Она также выполняет проверку правильности импортируемых классов, выделяет и инициализирует память для переменных класса, помогает в разрешении символьных ссылок. Эти действия выполняются в следующем порядке:

Примечание — загрузчик классов, помимо загрузки классов, также отвечает за поиск ресурсов. Ресурс — это некоторые данные (например, “.class” файл, данные конфигурации, изображения), которые идентифицируются с помощью абстрактного пути, разделенного символом «/». Ресурсы обычно упаковываются вместе с приложением или библиотекой для того, чтобы их можно было использовать в коде приложения или библиотеки.

Механизм загрузки классов в Java

Platform class loader — загружает выбранные (на основе безопасности / разрешений) модули Java SE и JDK. Например, java.sql.

Bootstrap class loader — загружает основные модули Java SE и JDK.

Эти три встроенных загрузчика классов работают вместе следующим образом:

Запустив этот код на установленном у меня Amazon Corretto 11.0.3, получим следующий результат:

Подробнее изучить ClassLoader API вы можете здесь (JDK 11).

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *