jdk begin

This commit is contained in:
Ivan I. Ovchinnikov 2022-08-14 16:46:20 +03:00
parent 4628464aef
commit 8205100db6
8 changed files with 141 additions and 19 deletions

Binary file not shown.

View File

@ -8,10 +8,10 @@
\usepackage{tikz}
\usepackage{indentfirst}
\usepackage{datetime2}
\usepackage{geometry}
\usepackage{geometry,lscape}
\usepackage{enumitem}
\usepackage{multicol}
\usepackage{float}
\usepackage{multicol,multirow}
\usepackage{float,adjustbox}
\usepackage{fontawesome}
\usepackage{longtable}
\usepackage{tikz}
@ -26,17 +26,18 @@
\babelfont{tt}{PT Mono}
\graphicspath{{./pics/}}
\newcounter{slidenum}
\setcounter{slidenum}{1} % set to 2 if want to exclude title page of presentation
\newcommand{\showslide}[1]{
\noindent\makebox[\linewidth]{\rule{.90\paperwidth}{1.4pt}}
\begin{center}
\framebox{\includegraphics[page=\arabic{slidenum},width=.95\textwidth]{#1}}
\framebox{\includegraphics[page=\arabic{slidenum},width=.85\textwidth]{#1}}
\stepcounter{slidenum}
\end{center}
}
\newcommand\hrf[1]{\hyperref[#1]{\ref{#1}}}
\newcommand\hRf[1]{\hyperref[#1]{\nameref{#1}}}
\newcommand{\wordcount}{\input{/tmp/wordcount.tex}}
\newcommand{\code}[1]{\small{\texttt{\detokenize{#1}}}\normalsize}
\renewcommand\labelitemi{\textemdash}
@ -81,6 +82,11 @@
\section{Платформа: история и окружение}
\subsection*{Конспект лекции}
\subsubsection{Краткая история (причины возникновения)}
\begin{itemize}
\item Язык создавали для разработки встраиваемых систем, сетевых приложений и прикладного ПО;
\item Популярен из-за скорости исполнения и полного абстрагирования от исполнителя кода;
\item Часто используется для программирования бэк-энда веб-приложений из-за изначальной нацеленности на сетевые приложения.
\end{itemize}
\begin{figure}[H]
\centering
\includegraphics[width=17cm]{jc-01-tiobe.png}
@ -95,8 +101,65 @@
\item IntelliJ IDEA - стандарт де-факто, используется на курсе и в большинстве современных компаний;
\item Android Studio - если заниматься мобильной разработкой.
\end{itemize}
\subsubsection{Что нужно скачать, откуда (как выбрать вендора)}
\subsubsection{Из чего всё состоит (JDK, JRE, JVM, выбор версии)}
\subsubsection{Что нужно скачать, откуда (как выбрать вендора, выбор версии)}
Для разработки понадобится среда разработки (IDE) и инструментарий разработчика (JDK). JDK выпускается несколькими поставщиками, большинство из них бесплатны и полнофункциональны, то есть поддерживают весь функционал языка и платформы.
В последнее время, с развитием контейнеризации приложений, часто устанавливают инструментарий в Docker-контейнер и ведут разработку прямо в контейнере, это позволяет не захламлять компьютер разработчика разными версиями инструментария и быстро разворачивать свои приложения в CI или на целевом сервере.
\begin{frm}
В общем случае, для разработки на любом языке программирования нужны так называемые SDK (Software Development Kit, англ. - инструментарий разработчика приложений или инструментарий для разработки приложений). Частный случай такого SDK - инструментарий разработчика на языке Java - Java Development Kit.
\end{frm}
На курсе будет использоваться BellSoft Liberica JDK 11, но возможно использовать и других производителей, например, самую распространённую Oracle JDK. Производителя следует выбирать из требований по лицензированию, так, например, Oracle JDK можно использовать бесплатно только в личных целях, за коммерческую разработку с использованием этого инструментария придётся заплатить.
Также возможно использовать и другие версии, но не старше 1.8. Это обосновано тем, что основные разработки на данный момент только начинают обновлять инструментарий до более новых версий (часто 11 или 13) или вовсе переходят на другие JVM-языки, такие как Scala, Groovy или Kotlin.
Для решения некоторых несложных задач курса мы будем писать простые приложения, не содержащие ООП, сложных взаимосвязей и проверок, в этом случае нам понадобится Jupyter notebook с установленным ядром (kernel) IJava.
\subsubsection{Из чего всё состоит (JDK, JRE, JVM и их друзья)}
TL;DR:
\begin{itemize}
\item JDK = JRE + инструменты разработчика;
\item JRE = JVM + библиотеки классов;
\item JVM = Native API + механизм исполнения + управление памятью.
\end{itemize}
Как именно всё работает? Если коротко, то слой за слоем накладывая абстракции. Программы на любом языке программирования исполняются на компьютере, то есть, так или иначе, задействуют процессор, оперативную память и прочие аппаратурные компоненты. Эти аппаратурные компоненты предоставляют для доступа к себе низкоуровневые интерфейсы, которые задействует операционная система, предоставляя в свою очередь интерфейс чуть проще программам, взаимодействующим с ней. Этот интерфейс взаимодействия с ОС мы для простоты будем называть Native API.
С ОС взаимодействует JVM, то есть, используя Native API, нам становится всё равно, какая именно ОС установлена на компьютере, главное уметь выполняться на JVM. Это открывает простор для создания целой группы языков, они носят общее бытовое название JVM-языки, к ним относят Scala, Groovy, Kotlin и другие. Внутри JVM осуществляется управление памятью, существует механизм исполнения программ, специальный JIT\footnote{JIT, just-in-time - англ. в\'{о}время, прямо сейчас}-компилятор.
% далее тут надо подробнее расписать ЖВМ
На пользовательском уровне важно не только исполнять программы, но чтобы эти программы умели как-то взаимодействовать с другими программами и другими аспектами внешнего мира, поэтому JVM интегрирована в JRE - Java Runtime Environment. JRE - это набор из классов и интерфейсов, осуществляющих взаимодействия с
В таблице \hrf{table:jdk-contents}, приведена примерная структура и состав JDK, а также указаны основные и наиболее часто используемые компоненты.
\begin{table}
\centering
\begin{adjustbox}{angle=90}
\begin{tabular}{|l|ll|llllllll|}
\cline{1-1} \cline{4-11}
\multirow{15}{*}{\rotatebox[origin=c]{270}{Java Development Kit }} & & & \multicolumn{8}{l|}{Language} \\ \cline{4-11}
& & & \multicolumn{1}{l|}{\multirow{3}{25mm}{tools + tools api}} & \multicolumn{1}{l|}{javac} & \multicolumn{1}{l|}{java} & \multicolumn{1}{l|}{javadoc} & \multicolumn{1}{l|}{javap} & \multicolumn{1}{l|}{jar} & \multicolumn{2}{l|}{JPDA} \\ \cline{5-11}
& & & \multicolumn{1}{l|}{} & \multicolumn{1}{l|}{JConsole} & \multicolumn{1}{p{25mm}|}{JavaVisualVM} & \multicolumn{1}{l|}{JMC} & \multicolumn{1}{l|}{JFR} & \multicolumn{1}{l|}{Java DB} & \multicolumn{1}{l|}{Int'l} & JVM TI \\ \cline{5-11}
& & & \multicolumn{1}{l|}{} & \multicolumn{1}{l|}{IDL} & \multicolumn{1}{l|}{Troubleshoot} & \multicolumn{1}{l|}{Security} & \multicolumn{1}{l|}{Deploy} & \multicolumn{1}{l|}{Scripting} & \multicolumn{1}{l|}{Web services} & RMI \\ \cline{2-2} \cline{4-11}
& \multicolumn{1}{l|}{\multirow{11}{*}{\rotatebox[origin=c]{270}{Java Runtime Environment }}} & & \multicolumn{1}{l|}{deployment} & \multicolumn{4}{l|}{Java Web} & \multicolumn{3}{l|}{Applet/Java plug-in} \\ \cline{3-11}
& \multicolumn{1}{l|}{} & \multirow{10}{*}{\rotatebox[origin=c]{270}{Java Standard Edition }} & \multicolumn{1}{l|}{\multirow{2}{*}{UI toolkit}} & \multicolumn{2}{l|}{Swing} & \multicolumn{2}{l|}{Java 2D} & \multicolumn{1}{l|}{AWT} & \multicolumn{2}{l|}{Accessibility} \\ \cline{5-11}
& \multicolumn{1}{l|}{} & & \multicolumn{1}{l|}{} & \multicolumn{2}{l|}{Drag'n'Drop} & \multicolumn{2}{l|}{Input Methods} & \multicolumn{1}{l|}{Image I/O} & \multicolumn{1}{l|}{Print Service} & Sound \\ \cline{4-11}
& \multicolumn{1}{l|}{} & & \multicolumn{1}{p{25mm}|}{Integration libraries} & \multicolumn{1}{l|}{IDL} & \multicolumn{1}{l|}{JDBC} & \multicolumn{1}{l|}{JNDI} & \multicolumn{1}{l|}{RMI} & \multicolumn{1}{l|}{RMI-IIOP} & \multicolumn{2}{l|}{Scripting} \\ \cline{4-11}
& \multicolumn{1}{l|}{} & & \multicolumn{1}{l|}{\multirow{3}{25mm}{Other base libraries}} & \multicolumn{2}{l|}{Override Mechanism} & \multicolumn{2}{l|}{Intl Support} & \multicolumn{2}{l|}{Input/Output} & JMX \\ \cline{5-11}
& \multicolumn{1}{l|}{} & & \multicolumn{1}{l|}{} & \multicolumn{2}{l|}{XML JAXP} & \multicolumn{2}{l|}{Math} & \multicolumn{2}{l|}{Networking} & Beans \\ \cline{5-11}
& \multicolumn{1}{l|}{} & & \multicolumn{1}{l|}{} & \multicolumn{2}{l|}{Security} & \multicolumn{2}{l|}{Serialization} & \multicolumn{2}{l|}{Extension Mechanism} & JNI \\ \cline{4-11}
& \multicolumn{1}{l|}{} & & \multicolumn{1}{l|}{\multirow{3}{25mm}{Java lang and util base libs}} & \multicolumn{1}{l|}{JAR} & \multicolumn{1}{l|}{Lang and util} & \multicolumn{2}{l|}{Ref Objects} & \multicolumn{2}{l|}{Preference API} & Reflection \\ \cline{5-11}
& \multicolumn{1}{l|}{} & & \multicolumn{1}{l|}{} & \multicolumn{1}{l|}{Zip} & \multicolumn{1}{l|}{Management} & \multicolumn{2}{l|}{Instrumentation} & \multicolumn{2}{l|}{Stream API} & Collections \\ \cline{5-11}
& \multicolumn{1}{l|}{} & & \multicolumn{1}{l|}{} & \multicolumn{1}{l|}{Logging} & \multicolumn{1}{p{25mm}|}{Regular Expressions} & \multicolumn{2}{l|}{Concurrency Utilities} & \multicolumn{2}{l|}{Datetime} & Versioning \\ \cline{4-11}
& \multicolumn{1}{l|}{} & & \multicolumn{1}{l|}{JVM} & \multicolumn{7}{l|}{Java Hot Spot VM (JIT)} \\ \hline
\end{tabular}
\end{adjustbox}
\label{table:jdk-contents}
\caption{Общее представление состава JDK}
\end{table}
\subsubsection{Структура проекта (пакеты, классы, метод main, комментарии)}
\subsubsection{Отложим мышки в сторону (CLI: сборка, пакеты, запуск)}
\subsubsection{Документирование (Javadoc)}

BIN
pics/jc-01-jdk-contrib.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

BIN
pics/jc-01-jupyter-logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

Binary file not shown.

View File

@ -49,6 +49,12 @@
\end{frame}
\note{...}
\begin{frame}
\frametitle{Почему Java?}
Написано однажды, работает везде.
\end{frame}
\note{...}
\begin{frame}
\frametitle{Базовый инструментарий}
\begin{enumerate}
@ -78,18 +84,47 @@
\begin{frame}
\frametitle{Что нужно скачать}
\begin{enumerate}
\item оракл ждк
\item опен ждк
\item либерика ждк
\item гост жаба
\item экзотические истории поискать надо
\item Oracle JDK
\item OpenJDK by Oracle
\item Liberica JDK
\item экзотические
\begin{itemize}
\item GOST Java
\item AdoptOpenJDK
\item Red Hat OpenJDK
\item Azul Zulu
\item Amazon Corretto
\end{itemize}
\end{enumerate}
\end{frame}
\note{...}
\begin{frame}
\frametitle{Кто делает для нас JDK}
\includegraphics[width=12cm]{../pics/jc-01-jdk-contrib.png}
\end{frame}
\note{...}
\begin{frame}
\frametitle{Когда нужно по-быстрому}
\includegraphics[width=12cm]{../pics/jc-01-jupyter-logo.png}
\end{frame}
\note{...}
\begin{frame}
\frametitle{JDK и его друзья}
\end{frame}
\note{...}
\begin{frame}
\frametitle{JVM и что в нём происходит}
\end{frame}
\note{...}
\begin{frame}
\frametitle{title}
\end{frame}
\note{...}
\end{document}

View File

@ -4,11 +4,11 @@
\showslide{build/jc-1-b.pdf}
Добро пожаловать на специализацию Java, лучшую из всех специализаций Java, что вы сможете найти.
% ------------------------------------------------------------------------------------------------
% -----------------------------------------------------------------------------------
\showslide{build/jc-1-b.pdf}
Здравствуйте, меня зовут Иван, я разработчик программного обеспечения в Российских космических системах, начальник группы программистов, автор и преподаватель нескольких курсов в направлении программирования на портале GeekBrains. Пара слов обо мне, почему я нахожусь здесь и планирую Вам что-то рассказывать про язык Java? Для этого придётся вынести за скобки мой опыт работы в цифровой схемотехнике и других языках, в том числе создание бортовой аппаратуры, которая прямо сейчас летает у нас над головами или продолжает доставлять другие полезные грузы в космос. С точки зрения языка Java, обо мне можно сказать, что я являюсь разработчиком нескольких отраслевых информационных систем поддержки единой наземной инфраструктуры российского космического агентства. На моём счету также участие в межотраслевых проектах по созданию единых баз данных космического применения.
%------------------------------------------------------------------------------------------------
% -----------------------------------------------------------------------------------
\showslide{build/jc-1-b.pdf}
Итак язык Java. Согласно википедии, Java — строго типизированный объектно-ориентированный язык программирования общего назначения, разработанный компанией Sun Microsystems. Разработка ведётся сообществом; язык и основные реализующие его технологии распространяются по лицензии GPL.
@ -18,9 +18,13 @@
Существует, интересная версия происхождения названия языка, связанная с аллюзией на кофе машину как пример бытового устройства, для программирования которого изначально язык создавался. Кстати, в результате работы проекта мир увидел принципиально новое устройство, карманный персональный компьютер, который опередил своё время более чем на 10 лет, но из-за большой стоимости не смог произвести переворот в мире технологии и был забыт. Устройство Star7 не пользовалось популярностью, в отличие от языка программирования Java и его окружения. С середины 1990-х годов язык стал широко использоваться для написания клиентских приложений и серверного программного обеспечения. Тогда же некоторое распространение получила технология Java-апплетов — графических Java-приложений, встраиваемых в веб-страницы; с развитием возможностей динамических веб-страниц технология стала применяться редко и язык стал применяться для бэк-энда.
Итак Язык программирования Java занял свою нишу в системном и прикладном программировании из-за своей высокой скорости работы, и веб-программировании, из-за удобного сетевого окружения, ставшего основой для создания бэк-энда веб-сервисов. Java очевидно испытал влияние языков C, C++, Pascal и других, так что многое в этих языках достаточно досконально изучить один раз, чтобы иметь возможность понимать все связанные.
% -----------------------------------------------------------------------------------
\showslide{build/jc-1-b.pdf}
Итак Язык программирования Java занял свою нишу в системном и прикладном программировании из-за своей высокой скорости работы, и веб-программировании, из-за удобного сетевого окружения, ставшего основой для создания бэк-энда веб-сервисов. Java очевидно испытал влияние языков C, C++, Pascal и других, так что многое в этих языках достаточно досконально изучить один раз, чтобы иметь возможность понимать все связанные.
% ------------------------------------------------------------------------------------------------
Поскольку язык изначально проектировался для множества разнообразных исполнителей с разными архитектурами процессоров и систем, было принято решение отделить исполнителя от решаемой прикладной задачи, так появилась виртуальная машина Java, речь о которой пойдёт немного позже. Основной смысл в том, что у языка Java появился девиз: Написано однажды, работает везде.
% -----------------------------------------------------------------------------------
\showslide{build/jc-1-b.pdf}
Мы привыкли к тому, что для программирования нужна некоторая среда, которая будет удобно подсказывать нам, что делать, как писать программу, запускать написанный код и помогать нам отлаживать его. Чаще всего это так, но я призываю вас не останавливаться на единственном инструменте, ведь если быть всегда сосредоточенным на отвёртке, вы никогда не узнаете, что люди придумали очень удобный шуруповёрт.
@ -33,12 +37,32 @@
Отдельно стоит обговорить такую среду, как Android Studio, как мог заметить внимательный зритель, её нет в списке на слайде, но не потому, что в ней нельзя разрабатывать Java-приложения, а потому что если не разрабатывать в ней именно Android приложения, следует отказаться от её использования из-за некоторой избыточности. Среда снабжена значительным количеством надстроек и эмуляторов мобильных устройств, которые попросту будут вам мешать, если вы не используете их в своей профессиональной деятельности. С другой стороны, если ваша цель - это именно мобильная разработка под Android, то и выбора у вас особо нет, только Android Studio.
% ------------------------------------------------------------------------------------------------
% -----------------------------------------------------------------------------------
\showslide{build/jc-1-b.pdf}
О средах программирования дополнительно поговорили, нужно выбрать какую-нибудь, и скачать. В курсе, кроме этого урока будет использоваться комьюнити версия среды Intellij IDEA, можете для простоты выбрать её. Наверняка, для прохождения предыдущих курсов вы уже скачали и установили JDK, и вот сейчас пришла пора разобраться, что это, какие они бывают, откуда их брать и как их выбирать, мы же за осознанность как-никак.
Для разработки на языке Java вам может понадобиться довольно много разного инструментария, тем более, что требования к инструментарию отличаются ещё и от команды к команде, вам может потребоваться средство для работы с БД, средства моделирования и описания систем, дополнительные средства документирования кода и решений. Но совершенно точно можно сказать, что без двух вещей обойтись не удастся: это иде, они же среды программирования и ждк, он же инструментарий разработчика на java. О средах программирования дополнительно только что поговорили, нужно выбрать какую-нибудь, и скачать. Скорее всего вы это сделали для прохождения более ранних курсов, сейчас сможете для себя выбрать инструмент более осознанно. В курсе, кроме этой лекции и следующего за ней семинара, будет использоваться комьюнити версия среды Intellij IDEA, можете для простоты выбрать её, что вы уже скорее всего и сделали. Наверняка, для прохождения предыдущих курсов вы уже скачали и установили JDK какой-нибудь хорошей новой версии, а сейчас пришла пора разобраться, что это, какие они бывают, откуда их брать и как их выбирать, мы же за осознанность как-никак.
% ------------------------------------------------------------------------------------------------
% -----------------------------------------------------------------------------------
\showslide{build/jc-1-b.pdf}
Итак, вендоры и версии. JDK развивается, поэтому выходят новые версии, исправляющие предыдущие недочёты, добавляющие новую функциональность. Самая распространённая версия в современной российской действительности - восьмая, но есть очень серьёзный тренд на переход к 11 и 13й версиям, на более новые часто смотрят с опаской. Распространённых вендоров три - оракл, опен, либерика. Есть, конечно, компании, собирающие свой инструментарий из открытых источников самостоятельно, но их крайне мало. Про экзотических вендоров рассказывать смысла не много, важно помнить, что они есть и у них у всех разные лицензионные политики. Я в курсе буду использовать либерику, как делаю последние несколько лет, хотя довольно долгое время пользовался ораклом. Поскольку я работаю в около- государственной компании, не могу не упомянуть о ГОСТ джаве, которая часто всерьёз рассматривается в организациях, подобных моей, и об опенЖДК, который является основой для самостоятельных сборок инструментария.
Наиболее популярной, конечно, является оракл ждк, но, если мне будет позволено высказать персональное мнение, это больше дань традиции, нежели какая-то жизненная необходимость.
% -----------------------------------------------------------------------------------
\showslide{build/jc-1-b.pdf}
Если внимательно посмотреть на компании, внесшие вклад в развитие открытой части инструментария, начиная с ждк11 и до актуального на сегодня ждк18, конечно, максимально вкладывается оракл, но и беллсофт, производитель либерики, там будет в первой десятке. Повторюсь, я на курсе буду использовать либерику ждк11, благо для неё есть и докер-образ, если нужно как-то автоматизировать сборки вашего приложения, например; вы можете использовать любую другую не старше 8. Все примеры я буду приводить с учётом именно 8й версии языка, чтобы рассмотреть подходящий подавляющему большинству людей инструментарий. Если у вас уже установлена 11я версия от другого вендора - ничего менять не нужно, если установлена более новая версия, есть вероятность, что некоторые примеры будут отмечаться как чрезвычайно устаревшие, возможно, эти предупреждения на этапе обучения следует игнорировать. Для выбора вендора внимательно ознакомьтесь с лицензией, а для выбора версии языка руководствуйтесь здравым смыслом: большинство компаний в России и мире работают на 8, 11 или 13й версиях. Зачем учиться на какой-нибудь 18-й версии, если потом на работе вы не увидите половины каких-нибудь новых фич и фактически, придётся переучиваться?
% -----------------------------------------------------------------------------------
\showslide{build/jc-1-b.pdf}
Для решения некоторых несложных задач курса мы будем писать простые приложения, не содержащие ООП, сложных взаимосвязей и проверок, в этом случае нам понадобится Jupyter notebook с установленным ядром (kernel) IJava. Да, многие думают, что Jupyter ноутбуки - это только для языка пайтон или для скриптовых языков, но это не так. Архитектура юпитер ноутбука позволяет ему работать с любым ядром, главное, чтобы ядро умело корректно интерпретировать написанное в ячейке с кодом. Ядро IJava делает именно это - интерпретирует Java-код, используя установленный на компьютере разработчика JDK.
% -----------------------------------------------------------------------------------
\showslide{build/jc-1-b.pdf}
Очень часто в интернете, при скачивании какого-то программного обеспечения, связанного с Java можно увидеть разные аббревиатуры: JRE, JVM, JDK и тому подобные, и чтобы в них не запутаться давайте коротко и быстро разберёмся что они значат, потому что я чувствую, как вам уже начинают надоедать все эти вступления.
Пойдём от самого масштабного и общего к самому маленькому и частному. Самая масштабная и общая аббревиатура - это JDK Java Development Kit - инструментарий разработчика на языке Java. Это обычный SDK который содержит в себе также всё необходимое для разработки именно на языке Java здесь есть куча других аббревиатур, компилятор, средства развёртывания, создания документации, итд они позволяют удобно писать программы на языке Java и абстрагируют программиста от необходимости описывать все вспомогательные процессы непосредственно на языке программирования то есть, грубо говоря это некие классы которые инкапсулирует сложное преобразование текста программ в простой интерфейс разработчика.
Всё, что разрабатывает разработчик, исполняется в специальной среде это среда является частью JDK и позволяет исполнять все программы написанные разработчиками на конечном в компьютере. Именно эта среда и устанавливается на компьютере пользователя чтобы пользователь мог запускать приложения, написанные на языке Java. Итак, самая необходимая вещь для любого пользователя это JRE. Это аббревиатура расшифровывается как Java Runtime Environment, то есть среда исполнения программ на языке Java. Она содержит в себе основной внутренний механизм который называется Java virtual machine и библиотеку из разных классов чтобы эта виртуальная машина хорошо работала умела показывать пользователю строки осуществлять ввод-вывод фреймворк коллекций и прочее, тут тоже есть куча интересных аббревиатур, которые мы так или иначе изучим, например, Java native interface, Java database connectivity и другие. Если копнуть ещё чуть глубже, можно и JRE разделить на JSE и JEE, но нас это деление пока не очень интересует, оно произойдёт естественным образом на более старших курсах. Пока что всё, что мы будем изучать, это JSE.
Инструментарий разработчика мы будем так или иначе рассматривать весь оставшийся курс, части среды исполнения мы тоже будем всесторонне изучать на последующих уроках сейчас хотелось бы подробнее остановиться на виртуальной машине Java поскольку понимание того как она устроена должно значительно облегчить для вас понимание процесса исполнения программы и как следствие процесс разработки этих самых программ. Виртуальная машина Java осуществляет загрузку классов программы в некую оперативную память здесь имеется ввиду не оперативная память как аппаратное часть компьютера а некая выделенная часть этой оперативной памяти который с нами поделилось операционная система также осуществляется управление памятью а именно очистка и сборка мусора и непосредственное исполнение классов нашего приложения путём Компиляции методов из промежуточного байткода в непосредственные вызовы операционной системы или другого исполнителя то есть грубо говоря преобразования классов джавы в ассемблерный код конкретного компьютера jit компиляция. Существуют разные Реализация виртуальных машин (https://ru.m.wikipedia.org/wiki/Список_виртуальных_машин_Java) даже экзотические, например мультиязыковой интерпретатор GraalVM. по большей части виртуальные машины отличаются как раз вот этой частью с just In time Компиляцией то есть с преобразованием методов в непосредственные машинные вызовы в реальном времени. чем быстрее происходит эта just In time Компиляция тем соответственно быстрее работает приложение.
\end{document}