JVM – что это? Как устроена виртуальная машина Java
Виртуальная машина Java («Java Virtual Machine» — JVM) — это основная часть платформы Java Runtime Environment (JRE), которая интерпретирует байт-код Java для запуска программ.
Одним из наиболее значительных преимуществ использования является использование JVM для запуска программы Java в любой операционной среде. В её основе реализуется принцип WORA (Write once, run anywhere — «написал один раз, запускай везде»), который сильно упростил процессы разработки.
Как правило, считается, что JVM имеет двойное определение — техническое и неформальное.
Техническое: JVM — это спецификация программы, которая обеспечивает среду выполнения кода Java.
Неофициальное: JVM запускает приложения Java, c помощью настроенных параметров для управления всеми программными ресурсами.
Что делает виртуальная машина Java
JVM выполняет две основные функции:
- позволяет запускать Java-программы на любом устройстве или в любой операционной системе;
- даёт доступ к управлению памятью программ и её оптимизации.
Поскольку JVM — это хорошо известная среда выполнения со стандартизированной конфигурацией, мониторингом и управлением, она естественным образом подходит для контейнерной разработки с использованием таких технологий, как Docker.
Роль Java Virtual Machine
Теперь давайте более подробно рассмотрим место виртуальной машины Java в выполняемых процессах.
Если вы внимательно посмотрите на схему, добавленную выше, то будет несложно догадаться, что JVM образует слой между операционной системой и программами Java.
Это означает, что скомпилированная Java-программа будет связываться с Java Virtual Machine, а JVM будет общаться с операционной системой, являясь своего рода посредником между скомпилированными файлами классов и операционной системой.
Файл .class и байт-код
Когда дело доходит до выполнения программы, главное, что интересует виртуальную машину Java — это определённый формат файла – .class.
Файлы классов содержат наполовину скомпилированный код, называемый байт-кодом, который в свою очередь предоставляет JVM инструкции, таблицу символов и другую вспомогательную информацию.
Архитектура виртуальной машины Java
Понять, что такое виртуальная машина Java, будет немного проще, если познакомиться с её архитектурой и тем, как она работает. Поэтому важно рассмотреть строение JVM и особенности её частей.
Java Virtual Machine состоит из трёх отдельных компонентов:
- загрузчик классов;
- область памяти;
- исполнительный механизм.
Загрузчики классов отвечают за динамическую загрузку файлов .class в виртуальную машину Java и сохранения байт-кода в области метода JVM, о которой мы поговорим чуть позже.
Загрузчик классов Java бывает трёх типов:
- BootStrap ClassLoader (Загрузчик классов начальной загрузки) — это машинный код, который запускает операцию, когда её вызывает JVM. Его задача — загрузить классы из папки rt.jar.
- Extension ClassLoader (Загрузчик классов расширений) является дочерним элементом Bootstrap ClassLoader и загружает расширения основных классов Java из каталога jre/lib/ext или любого другого каталога, на который указывает java.ext.dirs.
- System ClassLoader (Системный загрузчик классов) загружает классы, найденные в переменной среды CLASSPATH, -classpath или параметре командной строки -cp.
- Область памяти
Область памяти или, как её ещё называют, область данных времени выполнения JVM состоит из 5 частей:
- Область метода предназначена для хранения данных файлов .class: например, метаданные, данные полей и методов, а также код метода. Область метода создаётся автоматически при запуске виртуальной машины, и для каждой ВМ существует только одна область метода.
- Область кучи. В куче хранятся все объекты и соответствующие им переменные экземпляра. Когда мы создаём новый экземпляр класса, он сразу же загружается в область кучи, которая остается единственной во время выполнения задачи.
- Область стека. В неё загружаются все локальные переменные, вызовы методов и частичные результаты.
- Регистры ПК. В регистре ПК хранится адреса виртуальных машин Java, выполняющих операцию в данный момент. В Java каждый поток получает свой собственный регистр ПК.
- Стеки нативных методов. Нативные методы — это методы, написанные на C или C++. Виртуальная машина JVM хранит стеки, которые поддерживают такие методы, с отдельным стеком собственных методов, выделенным для каждого потока.
- Исполнительный механизм
Этот тип программного обеспечения используется для тестирования оборудования и программного обеспечения. При этом он не сохраняет никакой информации о тестируемом продукте.
- интерпретатора;
- JIT-компилятора;
- сборщика мусора.
Перед выполнением программы интерпретатор и компилятор JIT («Just-in-time» — «точно в нужное время») преобразуют байт-код в машинные инструкции. Интерпретатор делает это построчно.
В тот момент, когда в сценарии обнаруживается повторяющийся код, к нему подключается JIT-компилятор для ускорения операции. Затем он компилирует байт-код и заменяет его собственным кодом. Такой процесс повышает производительность всей системы.
Но за что же в таком случае отвечает сборщик мусора? В некоторых других языках программирования (таких как C++) освобождение памяти от объектов без циклических ссылок зависит лишь от самого программиста. Однако в JVM этим занимается сборщик мусора, что оптимизирует использование памяти.
Важно отметить, что сборка мусора выполняется в JVM автоматически через определённые отрезки времени и не требует отдельного внимания специалистов. Конечно, этот процесс можно попробовать принудительно запустить, вызвав System.gc(), но нет никакой гарантии, что это сработает.
Заключение
Несмотря на то, что виртуальная машина Java изначально предназначалась только для запуска и выполнения программ Java, на сегодняшний день она способна поддерживать многие языки сценариев и программирования, что лишь укрепило популярность данной платформы.
В этой статье мы познакомились с виртуальной машиной Java, её архитектурой и основными компонентами, а также поговорили о месте JVM в запрашиваемых системой операциях.
What is a Virtual Machine (VM)?
For simplicity, think of a virtual machine, VM, as a «computer made of software» that you can use to run any software you’d run on a physical computer. Like a physical machine, a virtual machine has its own operating system (Windows, Linux, etc.), storage, networking, configuration settings, and software, and it is fully isolated from other VMs running on that host.
Why use a virtual machine?
Virtualization consolidates many small workloads onto a single physical computer, which ensures greater efficiency and lowers IT expenses. Deploying a new virtual machine with an operating system and application(s) provides an easy way for IT administrators to deploy proofs-of-concept and DevTest environments before changing production environments.
Virtual machines may also provide simpler asset management by consolidating VMs onto fewer physical servers. Managing virtual machines may also save your company time by maintaining less hardware, provisioning resources faster, and reducing downtime. And they can also reduce the space needed to deploy servers—as a result, they also end up reducing energy consumption, which makes them a more eco-friendly solution as well.
Virtual machines can also be a cost-effective way to run legacy applications without having to migrate to a completely new operating system. As hardware ages or becomes obsolete, virtualization allows a user to have the best of both worlds: they can upgrade hardware but still retain access to older operating systems.
The best virtual machine is highly portable, meaning it can be moved between physical computers in a network, and even between on-premises and cloud environments. Running multiple virtual machines on the same host can optimize the use of system resources.
Our cloud platform is one that comes packed with the latest benefits of virtualization technology. Oracle Cloud Infrastructure (OCI)-based virtual machines provide secure, elastic compute capacity in the cloud for a variety of workloads—ranging from small development projects to large-scale applications. We allow VMs to be deployed, managed, and decommissioned easily. In addition, we support an extensive list of Microsoft Windows Server and Linux operating systems, with standardized images and secure configurations that can reduce human error, while lowering costs and improving security.
Virtualization and hypervisors: What makes virtual machines work?
With virtualization, a single computer (host) can run multiple virtual computers (VMs) each with their own operating systems, processor cores, memory, storage, and networking. Because virtualization enables you to consolidate many small workloads onto a single physical computer, it ensures high resource utilization, which reduces IT expenses.
If virtualization is defined as enabling multiple operating systems to run on a single host computer, then the essential component in the virtualization stack is the hypervisor, which holds the VM and host computer together. A hypervisor is a software layer that enables virtual machines to run on the host computer and distribute processors, memory, and storage across all VMs.
This hypervisor, can also be referred to as the virtual machine monitor (VMM), creates a virtual platform by which multiple VMs are executed and monitored. This allows multiple operating systems, of the same or different operating system, to share the hardware resources.
As an example, VirtualBox is a popular virtualization product to build this virtual environment. It is a free, open source software that enables developers and IT administrators to quickly deploy operating systems. VirtualBox can be installed on macOS, Linux, and Windows. Other hypervisors include VMware vSphere and Microsoft Hyper-V.
Types of virtualization
Organizations today are faced with addressing increased complexity and provisioning in data centers to ensure growth and expansion. These constraints include increased power needs, data center costs, physical space constraints, and interconnection complexity.
Therefore, software and hardware manufacturers have begun to address some of these concerns by shifting how traditional data centers are architected via virtualization. There are the various types of virtualization:
Hardware virtualization:
Virtualizing hardware, including versions of computers and operating systems (VMs), creates a single, virtual, consolidated, primary server.
Software virtualization:
Creates a computer system, including hardware, that allows one or more guest OS to run on a physical host machine.
Storage virtualization:
Virtualizes storage by consolidating multiple physical storage devices, which appear as a single storage unit for improved performance and increased speed.
Network virtualization:
Enables application-driven cloud virtual networking across an entirely distributed set of systems, decoupling from physical network infrastructure. Network virtualization allocates bandwidth across channels, providing resources to servers and devices in real-time.
Desktop virtualization:
Separates your desktop environment from the physical device and stores a desktop on a remote server, allowing access from anywhere on any device.
Cloud computing and virtual machines
It’s easy to confuse virtualization with the cloud, mainly because both revolve around creating functional environments from resources across a network. However, virtualization is a technology to run multiple virtual machines on a single piece of hardware. The hardware runs your software, enabling you to install multiple operating systems that can run simultaneously and independently, in a secure environment, with minimal reduction in performance.
On the other hand, Clouds are IT environments that abstract, pool, and share scalable resources across a network.
Virtualization is a technology where cloud computing is an environment. Virtualization is the core software that enables cloud computing, which has become such an essential tool that businesses that don’t use it are at a competitive disadvantage.
Containers vs. virtual machines
Containers and virtual machines are both used by developers and IT professionals to create isolated virtual environments for testing and developing software. Whereas a virtual machine depends on a host to run a complete operating system, a container is an isolated silo that runs an application on the host. Containers run applications that are not dependent on an operating system—rather, they isolate an application by virtualizing it.
Since containers don’t contain operating systems, containers are lightweight and more portable than virtual machines. And even though containers are portable, they’re still constrained by their operating system; so that a container for Windows is unable to run on Linux. In the end, deciding between a container or a virtual machine depends on how a virtual environment will be used..
Kubernetes is an open source system for managing applications in a container environment. Kubernetes automates the processes to deploy and scale container applications. Using multiple containers for an app has become a common practice, with the containers spread across several servers. Our Container Engine for Kubernetes is a managed service that enables the deployment of the containers, so they can scale to match the workload.
Learn more about the differences between building and deploying your applications on virtual machines versus Kubernetes.
Virtualization and Oracle
We offer integrated virtualization products, from desktop to data center and public cloud. Going far beyond simple consolidation, we enable users to virtualize and manage a full hardware and software stack.
Learn more about how to manage your Oracle Linux KVM:
Oracle VM gives users the power to deploy operating systems and application software within a supported virtualization environment. Oracle’s offerings include:
- Oracle Linux Virtualization Manager is a server virtualization management platform that can be easily deployed, with support from Oracle.
- Oracle VM VirtualBox enables users to run multiple operating systems on Mac, PC, Linux, or Oracle Solaris systems.
- Oracle Secure Global Desktop enables users to remotely access data and applications in a data center or in the cloud. A highly secure client connection allows for users to access resources and for administrators to manage them.
- Legacy Desktop virtualization products
- Oracle VM Server for x86 and Oracle VM Manager
- Oracle VM Paravirtual Drivers for Microsoft Windows
- Oracle VM Server for SPARC
Бесплатная виртуальная машина: Oracle VM VirtualBox
Мощная платформа с открытым исходным кодом для виртуальных машин
Чтобы начать свой путь виртуализации, VM VirtualBox предлагает бесплатную виртуальную машину лицензия для личного, образовательного или ознакомительного использования. VM VirtualBox — это кросс-платформенное ПО для виртуализации с открытым кодом, благодаря которому пользователи могут запускать на одном компьютере несколько операционных систем одновременно, в том числе Windows, Linux, Solaris и macOS. Благодаря ему разработчики быстрее создают программный код, потому что могут запускать несколько операционных систем на одном устройстве. Кроме того, это решение позволяет снижать операционные затраты и сокращать сроки безопасного развертывания приложений в локальных средах и в облаке.
VM VirtualBox — это компактное и простое в установке ПО, но при этом оно очень мощное и быстрое, и им удобно пользоваться.
Вот несколько примеров простых и удобных функций:
- Импорт из Oracle Cloud Infrastructure
Менеджер Oracle VM VirtualBox может импортировать экземпляры Oracle Cloud Infrastructure (OCI) в Oracle VM VirtualBox, обеспечивая такие же возможности, как и у виртуальных машин. - Удобный экспорт в Oracle Cloud Infrastructure
Менеджер Oracle VM VirtualBox может экспортировать виртуальные машины в OCI как смоделированные или паравиртуализированные экземпляры, при этом повторно загружать одну и ту же виртуальную машину не нужно. - Поддержка вложенных виртуализаций
Можно устанавливать гипервизоры, такие как KVM, которые позволят создавать виртуальные машины и запускать гостевые ВМ. - Гостевые дополнения VirtualBox
Более удобное взаимодействие: можно менять размер гостевых окон, что повышает функциональность. - Менеджер управления файлами «гостя»
Пользователь ВМ (гостя) может легко переносить файлы между хостом и гостем. - Менеджер VirtualBox
Доступ к менеджеру Oracle VM VirtualBox обеспечивает поддержку переноса виртуальных машин в локальное хранилище. - Процесс клонирования виртуальной машины
Можно клонировать виртуальные машины, сохраняя UUID аппаратного обеспечения, имена образов дисков или политику использования MAC-адресов. - Облачный менеджер профилей
VirtualBox можно использовать для настройки информации о своем аккаунте OCI. - Общие папки
Возможность межплатформенных вычислений благодаря тому, что файловая система совместно используется платформой хоста и гостем. - Поддержка multi-touch
Если хост поддерживает интерфейсы multi-touch, то они поддерживаются и для гостей. - Гибкие параметры сети
Oracle VM VirtualBox поддерживает использование механизма NAT, мостовые сети, внутренние сети и сети только для хоста, а также дает возможность пользоваться различными сетевыми моделями данных. - IPv6
Эта опция в большинстве случаев доступна в вместе с IPv4.
- Поддержка аппаратного обеспечения Intel и AMD
Oracle VM VirtualBox поддерживает виртуализацию на уровне процессоров и позволяет гостям сократить время выполнения. - Поддержка трехмерной графики
Улучшена поддержка отображения трехмерной графики и повышена производительность. - Поддержка двустороннего перетаскивания
Поддержка перетаскивания материалов на всех платформах хоста с возможностью копирования или открывания файлов. - Шифрование образа диска
Возможность прозрачного шифрования данных, хранящихся в образах жестких дисков. - Подсистема ввода-вывода высокопроизводительного хранилища
VirtualBox поддерживает различные контейнеры виртуальных хранилищ, такие как STA, NVMe, SCSI, IDE и SAS, и обеспечивает высокую производительность и целостность данных. - Встроенный инициатор iSCSI
Виртуальные диски могут существовать как цели iSCSI, и гости распознают в сети стандартный контроллер. - Протокол удаленного дисплея
Протокол удаленного дисплея VirtualBox (VRDP) обеспечивает эффективный удаленный доступ к гостевой консоли и позволяет клиентам подключаться к тому или другому удаленному монитору. - Последовательные и USB-подключения
VirtualBox позволяет подключать к гостю внешние устройства через USB. - Виртуальная веб-камера
VirtualBox позволяет гостям, запускающим Google Hangouts или Skype, использовать камеру хоста. - Аудио высокого разрешения
VirtualBox позволяет гостям реализовать все возможности аудиокарты высокого разрешения. - Полная поддержка ACPI
Гости могут использовать события кнопки ACPI для контроля жизненного цикла виртуальной машины. - Мгновенные снимки с учетом разных поколений и ответвлений
Прежде чем устанавливать ПО, пользователи могут сделать мгновенный снимок и потом вернуться к предыдущему состоянию системы. - Гостевая автоматизация
API, которые используют возможности гостевой автоматизации, позволяют логике хоста управлять работой. - Веб-службы
Авторизованные клиенты получают возможность удаленного контроля с помощью API веб-служб.
Лицензия и поддержка Oracle VM VirtualBox
Oracle VM VirtualBox как платформа с открытым кодом для виртуальных машин поддерживает большинство гостевых операционных систем и позволяет заказчикам устанавливать и запускать множество платформ. Пользуйтесь виртуальной машиной с бесплатной лицензией в личных целях, для образования или оценки и начните применять Oracle VM Virtual Box уже сегодня.
При подготовке материала использовались источники:
https://www.nic.ru/help/jvm-chto-eto-kak-ustroena-virtual6naya-mashina-java_11250.html
https://www.oracle.com/cloud/compute/virtual-machines/what-is-virtual-machine/
https://www.oracle.com/cis/cloud/compute/virtual-machines/what-is-virtual-machine/free-virtual-machine/