HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p><strong>Java virtual machine (JVM) - это программа, которая разработана для выполнения и запуска других программ на основе Java. В основе JVM лежит простая и гениальная идея, которая всегда останется одним из величайших примеров программирования в стиле кунг-фу. JVM может также использоваться для выполнения программ, написанных на других языках программирования. Подробно рассказываем, как работает JVM, для чего используется эта технология и почему она является одним из главных компонентов в платформе Java. Материал основан на<a>статье</a>Java-разработчика Matthew Tyson "What is the JVM? Introducing the Java Virtual Machine".</strong></p>
1 <p><strong>Java virtual machine (JVM) - это программа, которая разработана для выполнения и запуска других программ на основе Java. В основе JVM лежит простая и гениальная идея, которая всегда останется одним из величайших примеров программирования в стиле кунг-фу. JVM может также использоваться для выполнения программ, написанных на других языках программирования. Подробно рассказываем, как работает JVM, для чего используется эта технология и почему она является одним из главных компонентов в платформе Java. Материал основан на<a>статье</a>Java-разработчика Matthew Tyson "What is the JVM? Introducing the Java Virtual Machine".</strong></p>
2 <h2>Содержание</h2>
2 <h2>Содержание</h2>
3 <ul><li><a>Для чего используется Java virtual machine</a></li>
3 <ul><li><a>Для чего используется Java virtual machine</a></li>
4 <li><a>Кто разрабатывает и обслуживает JVM?</a></li>
4 <li><a>Кто разрабатывает и обслуживает JVM?</a></li>
5 <li><a>Сборка мусора</a></li>
5 <li><a>Сборка мусора</a></li>
6 <li><a>Три главные части JVM</a></li>
6 <li><a>Три главные части JVM</a></li>
7 <li><a>Загрузка и выполнение class-файлов в JVM</a></li>
7 <li><a>Загрузка и выполнение class-файлов в JVM</a></li>
8 <li><a>Управление системными ресурсами</a></li>
8 <li><a>Управление системными ресурсами</a></li>
9 <li><a>Эволюция JVM: прошлое, настоящее, будущее</a></li>
9 <li><a>Эволюция JVM: прошлое, настоящее, будущее</a></li>
10 </ul><h2>Для чего используется Java virtual machine</h2>
10 </ul><h2>Для чего используется Java virtual machine</h2>
11 <p>JVM имеет две основные функции:</p>
11 <p>JVM имеет две основные функции:</p>
12 <ol><li>Позволяет запускать программы, написанные на Java, на любых устройствах или операционных системах. Так реализуется принцип Java - "Написал один раз, запускай везде".</li>
12 <ol><li>Позволяет запускать программы, написанные на Java, на любых устройствах или операционных системах. Так реализуется принцип Java - "Написал один раз, запускай везде".</li>
13 <li>Управляет и оптимизирует память, которую используют программы.</li>
13 <li>Управляет и оптимизирует память, которую используют программы.</li>
14 </ol><p>Во время выхода первой версии Java в 1995 году все программы писались для конкретной операционной системы, а памятью управлял разработчик программного обеспечения. Поэтому появление JVM стало революцией на рынке.</p>
14 </ol><p>Во время выхода первой версии Java в 1995 году все программы писались для конкретной операционной системы, а памятью управлял разработчик программного обеспечения. Поэтому появление JVM стало революцией на рынке.</p>
15 <p>Существует два основных определения JVM - техническое и повседневное:</p>
15 <p>Существует два основных определения JVM - техническое и повседневное:</p>
16 <ul><li><strong>Техническое определение</strong>: JVM - это софт, который выполняет код и предоставляет среду для его выполнения.</li>
16 <ul><li><strong>Техническое определение</strong>: JVM - это софт, который выполняет код и предоставляет среду для его выполнения.</li>
17 <li><strong>Повседневное определение</strong>: JVM - это способ запуска наших Java-приложений. Мы настраиваем параметры JVM, а потом полагаемся на ее автоматическое управление ресурсами во время выполнения.</li>
17 <li><strong>Повседневное определение</strong>: JVM - это способ запуска наших Java-приложений. Мы настраиваем параметры JVM, а потом полагаемся на ее автоматическое управление ресурсами во время выполнения.</li>
18 </ul><p>Когда разработчики говорят о JVM, обычно имеется в виду процесс, который выполняется на нашем устройстве, особенно на сервере - он управляет и контролирует использование ресурсов Java-приложения.</p>
18 </ul><p>Когда разработчики говорят о JVM, обычно имеется в виду процесс, который выполняется на нашем устройстве, особенно на сервере - он управляет и контролирует использование ресурсов Java-приложения.</p>
19 <h2>Кто разрабатывает и обслуживает JVM?</h2>
19 <h2>Кто разрабатывает и обслуживает JVM?</h2>
20 <p>На сегодняшний день JVM массово используется и развивается в разных проектах - как коммерческих, так и Open Sourse. Например, существует проект OpenJDK, который представляет собой полностью совместимый Java Development Kit, состоящий исключительно из свободного и открытого исходного кода. При этом, несмотря на открытость кода этого проекта, его разработкой практически полностью занимается корпорация Oracle.</p>
20 <p>На сегодняшний день JVM массово используется и развивается в разных проектах - как коммерческих, так и Open Sourse. Например, существует проект OpenJDK, который представляет собой полностью совместимый Java Development Kit, состоящий исключительно из свободного и открытого исходного кода. При этом, несмотря на открытость кода этого проекта, его разработкой практически полностью занимается корпорация Oracle.</p>
21 <h2>Сборка мусора</h2>
21 <h2>Сборка мусора</h2>
22 <p>В Java памятью управляет JVM с помощью процесса, который называется <em>сборкой мусора - он</em>непрерывно определяет и удаляет неиспользуемую память в Java-приложениях. Сборка мусора происходит внутри работающей JVM.</p>
22 <p>В Java памятью управляет JVM с помощью процесса, который называется <em>сборкой мусора - он</em>непрерывно определяет и удаляет неиспользуемую память в Java-приложениях. Сборка мусора происходит внутри работающей JVM.</p>
23 <p>В начале существования Java подвергалась серьезной критике за то, что не была<a>"Close to the metal"</a>как C++, поэтому не была такой быстрой. Особенно спорным критики называли процесс сборки мусора. С тех пор были предложены и использованы различные алгоритмы и подходы, которые значительно улучшили и оптимизировали сборку мусора.</p>
23 <p>В начале существования Java подвергалась серьезной критике за то, что не была<a>"Close to the metal"</a>как C++, поэтому не была такой быстрой. Особенно спорным критики называли процесс сборки мусора. С тех пор были предложены и использованы различные алгоритмы и подходы, которые значительно улучшили и оптимизировали сборку мусора.</p>
24 <h2>Три главные части JVM</h2>
24 <h2>Три главные части JVM</h2>
25 <p>JVM состоит из трех основных частей: спецификация, реализация и экземпляр. Рассмотрим каждую из них.</p>
25 <p>JVM состоит из трех основных частей: спецификация, реализация и экземпляр. Рассмотрим каждую из них.</p>
26 <h3>Спецификация JVM</h3>
26 <h3>Спецификация JVM</h3>
27 <p>Первая часть JVM - <a>спецификация</a>, которая до конца не определяет все детали реализации виртуальной машины. Это значит, что остается максимальная свобода творчества для разработчика, который работает с ней. Чтобы правильно реализовать виртуальную машину Java, вам нужно всего лишь уметь читать class-файлы и правильно выполнять указанные в них операции.</p>
27 <p>Первая часть JVM - <a>спецификация</a>, которая до конца не определяет все детали реализации виртуальной машины. Это значит, что остается максимальная свобода творчества для разработчика, который работает с ней. Чтобы правильно реализовать виртуальную машину Java, вам нужно всего лишь уметь читать class-файлы и правильно выполнять указанные в них операции.</p>
28 <p>Итак, все, что должна делать JVM - правильно запускать Java-программы. Это может показаться достаточно простым процессом, однако это очень масштабная задача, учитывая мощность и гибкость языка Java.</p>
28 <p>Итак, все, что должна делать JVM - правильно запускать Java-программы. Это может показаться достаточно простым процессом, однако это очень масштабная задача, учитывая мощность и гибкость языка Java.</p>
29 <h3>Реализация JVM</h3>
29 <h3>Реализация JVM</h3>
30 <p>Реализация спецификации JVM приводит к созданию реальной программы, которая и является реализацией JVM. По сути, существует огромное количество реализаций спецификации JVM - как коммерческих, так и с открытым кодом.</p>
30 <p>Реализация спецификации JVM приводит к созданию реальной программы, которая и является реализацией JVM. По сути, существует огромное количество реализаций спецификации JVM - как коммерческих, так и с открытым кодом.</p>
31 <h3>Экземпляр JVM</h3>
31 <h3>Экземпляр JVM</h3>
32 <p>После того, как спецификация JVM реализована и выпущена в качестве самостоятельной программы, вы можете загрузить ее как приложение. Эта загруженная программа является экземпляром виртуальной машины.</p>
32 <p>После того, как спецификация JVM реализована и выпущена в качестве самостоятельной программы, вы можете загрузить ее как приложение. Эта загруженная программа является экземпляром виртуальной машины.</p>
33 <p>Чаще всего, когда разработчики говорят о JVM, они имеют ввиду экземпляр JVM, который работает в среде разработки. Вы можете сказать: "Привет, сколько памяти использует JVM на этом сервере?" или "Я не могу поверить, что сделал зацикленный вызов, а переполнение стека сломало мою JVM. А ведь это просто ошибка новичка!"</p>
33 <p>Чаще всего, когда разработчики говорят о JVM, они имеют ввиду экземпляр JVM, который работает в среде разработки. Вы можете сказать: "Привет, сколько памяти использует JVM на этом сервере?" или "Я не могу поверить, что сделал зацикленный вызов, а переполнение стека сломало мою JVM. А ведь это просто ошибка новичка!"</p>
34 <h2>Загрузка и выполнение class-файлов в JVM</h2>
34 <h2>Загрузка и выполнение class-файлов в JVM</h2>
35 <p>Мы говорили о роли JVM в запуске Java-приложений, но как виртуальная машина выполняет свою функцию? Для запуска Java-приложений JVM зависит от загрузчика классов и механизма выполнения Java.</p>
35 <p>Мы говорили о роли JVM в запуске Java-приложений, но как виртуальная машина выполняет свою функцию? Для запуска Java-приложений JVM зависит от загрузчика классов и механизма выполнения Java.</p>
36 <h3>Загрузчик классов в JVM</h3>
36 <h3>Загрузчик классов в JVM</h3>
37 <p>Все в Java - классы, и все Java-приложения состоят из классов. Любое приложение может состоять из одного или многих тысяч классов. Чтобы запустить Java-приложение, JVM должна загрузить скомпилированные .class-файлы в контекст - например, в сервер, где они будут доступны. JVM зависит от своего загрузчика класса для корректного выполнения этой функции.</p>
37 <p>Все в Java - классы, и все Java-приложения состоят из классов. Любое приложение может состоять из одного или многих тысяч классов. Чтобы запустить Java-приложение, JVM должна загрузить скомпилированные .class-файлы в контекст - например, в сервер, где они будут доступны. JVM зависит от своего загрузчика класса для корректного выполнения этой функции.</p>
38 <p>Загрузчик классов Java является частью JVM - он загружает классы в память и делает их доступными для выполнения. Загрузчик классов использует технику ленивой загрузки (lazy-loading) и кэширование, чтобы сделать загрузку классов максимально эффективной. При этом использование таких методов считается достаточно простым процессом.</p>
38 <p>Загрузчик классов Java является частью JVM - он загружает классы в память и делает их доступными для выполнения. Загрузчик классов использует технику ленивой загрузки (lazy-loading) и кэширование, чтобы сделать загрузку классов максимально эффективной. При этом использование таких методов считается достаточно простым процессом.</p>
39 <p>Все виртуальные машины Java включают в себя загрузчики классов. Спецификация JVM описывает стандартные методы для запроса и управления загрузчиком во время работы, но за выполнение этих возможностей отвечает конкретная реализация JVM. С точки зрения разработчика, механизмы, лежащие в основе загрузчика классов, обычно представляют собой черный ящик.</p>
39 <p>Все виртуальные машины Java включают в себя загрузчики классов. Спецификация JVM описывает стандартные методы для запроса и управления загрузчиком во время работы, но за выполнение этих возможностей отвечает конкретная реализация JVM. С точки зрения разработчика, механизмы, лежащие в основе загрузчика классов, обычно представляют собой черный ящик.</p>
40 <h3>Механизм выполнения в JVM</h3>
40 <h3>Механизм выполнения в JVM</h3>
41 <p>После того, как загрузчик классов завершил свою работу, JVM начинает выполнять код каждого класса. Механизм выполнения - компонент JVM, который обрабатывает функции, и он необходим для корректной работы любой виртуальной машины Java.</p>
41 <p>После того, как загрузчик классов завершил свою работу, JVM начинает выполнять код каждого класса. Механизм выполнения - компонент JVM, который обрабатывает функции, и он необходим для корректной работы любой виртуальной машины Java.</p>
42 <p>Выполнение кода включает управление доступом к системным ресурсам. Механизм выполнения JVM находится между работой программы, с ее запросами на файловые, сетевые ресурсы и ресурсы памяти, и операционной системой, которая предоставляет эти ресурсы.</p>
42 <p>Выполнение кода включает управление доступом к системным ресурсам. Механизм выполнения JVM находится между работой программы, с ее запросами на файловые, сетевые ресурсы и ресурсы памяти, и операционной системой, которая предоставляет эти ресурсы.</p>
43 <h2>Управление системными ресурсами</h2>
43 <h2>Управление системными ресурсами</h2>
44 <p>Системные ресурсы могут быть разделены на две больших категории: память и все остальное.</p>
44 <p>Системные ресурсы могут быть разделены на две больших категории: память и все остальное.</p>
45 <p>JVM отвечает за очистку неиспользуемой памяти, при этом сборщик мусора - это механизм, который и осуществляет этот процесс. JVM также отвечает за распределение и поддержание ссылочной структуры, которую любой разработчик принимает как само собой разумеющееся. Например, механизм выполнения JVM отвечает за то, что при использовании ключевого слова <em>new происходит запрос к операционной системе на выделение памяти.</em></p>
45 <p>JVM отвечает за очистку неиспользуемой памяти, при этом сборщик мусора - это механизм, который и осуществляет этот процесс. JVM также отвечает за распределение и поддержание ссылочной структуры, которую любой разработчик принимает как само собой разумеющееся. Например, механизм выполнения JVM отвечает за то, что при использовании ключевого слова <em>new происходит запрос к операционной системе на выделение памяти.</em></p>
46 <p>Помимо памяти, механизм выполнения управляет ресурсами файловой системы и сети. Поскольку JVM совместима с различными операционными системами, то эта задача считается достаточно сложной. Помимо потребностей каждого приложения в ресурсах, механизм выполнения должен корректно работать с каждой операционной системой.</p>
46 <p>Помимо памяти, механизм выполнения управляет ресурсами файловой системы и сети. Поскольку JVM совместима с различными операционными системами, то эта задача считается достаточно сложной. Помимо потребностей каждого приложения в ресурсах, механизм выполнения должен корректно работать с каждой операционной системой.</p>
47 <h2>Эволюция JVM: прошлое, настоящее, будущее</h2>
47 <h2>Эволюция JVM: прошлое, настоящее, будущее</h2>
48 <p>В 1995 году разработчики JVM представили две революционные концепции, которые с тех пор стали стандартом в разработке: "Написал один раз, запускай везде" и автоматическое управление памятью. В то время совместимость софта была смелой концепцией, но сейчас это стало нормой. Точно так же, как современное поколение живет с автоматической сборкой мусора.</p>
48 <p>В 1995 году разработчики JVM представили две революционные концепции, которые с тех пор стали стандартом в разработке: "Написал один раз, запускай везде" и автоматическое управление памятью. В то время совместимость софта была смелой концепцией, но сейчас это стало нормой. Точно так же, как современное поколение живет с автоматической сборкой мусора.</p>
49 <p>Можно сказать, что если Джеймс Гослинг и Брендан Эйх изобрели современное программирование, то тысячи других разработчиков усовершенствовали и развили их идеи в последующие десятилетия. Изначально виртуальная машина Java предназначалась только для Java, но сегодня она эволюционировала до поддержки многих языков программирования, включая Scala, Groovy и Kotlin.</p>
49 <p>Можно сказать, что если Джеймс Гослинг и Брендан Эйх изобрели современное программирование, то тысячи других разработчиков усовершенствовали и развили их идеи в последующие десятилетия. Изначально виртуальная машина Java предназначалась только для Java, но сегодня она эволюционировала до поддержки многих языков программирования, включая Scala, Groovy и Kotlin.</p>