Как запустить jvm
Перейти к содержимому

Как запустить jvm

  • автор:

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.
  1. Область памяти

Область памяти или, как её ещё называют, область данных времени выполнения JVM состоит из 5 частей:

  • Область метода предназначена для хранения данных файлов .class: например, метаданные, данные полей и методов, а также код метода. Область метода создаётся автоматически при запуске виртуальной машины, и для каждой ВМ существует только одна область метода.
  • Область кучи. В куче хранятся все объекты и соответствующие им переменные экземпляра. Когда мы создаём новый экземпляр класса, он сразу же загружается в область кучи, которая остается единственной во время выполнения задачи.
  • Область стека. В неё загружаются все локальные переменные, вызовы методов и частичные результаты.
  • Регистры ПК. В регистре ПК хранится адреса виртуальных машин Java, выполняющих операцию в данный момент. В Java каждый поток получает свой собственный регистр ПК.
  • Стеки нативных методов. Нативные методы — это методы, написанные на C или C++. Виртуальная машина JVM хранит стеки, которые поддерживают такие методы, с отдельным стеком собственных методов, выделенным для каждого потока.
  1. Исполнительный механизм

Этот тип программного обеспечения используется для тестирования оборудования и программного обеспечения. При этом он не сохраняет никакой информации о тестируемом продукте.

  • интерпретатора;
  • JIT-компилятора;
  • сборщика мусора.

Перед выполнением программы интерпретатор и компилятор JIT («Just-in-time» — «точно в нужное время») преобразуют байт-код в машинные инструкции. Интерпретатор делает это построчно.

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

Но за что же в таком случае отвечает сборщик мусора? В некоторых других языках программирования (таких как C++) освобождение памяти от объектов без циклических ссылок зависит лишь от самого программиста. Однако в JVM этим занимается сборщик мусора, что оптимизирует использование памяти.

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

Заключение

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

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

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

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

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

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

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 этапа:

  • Загрузка байт-кода и создание экземпляра класса Class
    Грубо говоря, чтобы попасть на JVM, класс должен быть загружен. Для этого существуют отдельные класс-загрузчики, к ним мы вернемся чуть позже.
  • Связывание или линковка
    После загрузки класса начинается процесс линковки, на котором байт-код разбирается и проверяется. Процесс линковки в свою очередь происходит в 3 шага:

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

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

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

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

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

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

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

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

  • В первую очередь мы запрашиваем поиск в кэше System Class Loader (кэш системного загрузчика содержит классы, которые уже были им загружены);
  • Если класс не был найден в кэше системного загрузчика, мы смотрим кэш Extension class loader;
  • Если класс не найден в кэше загрузчика расширений, класс запрашивается у загрузчика Bootstrap.

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

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

Один класс, написанный на Java, компилируется в один файл с расширением .class. Если в нашем Java файле лежит несколько классов, один файл Java может быть скомпилирован в несколько файлов с расширением .class — файлов байт-кода данных классов.

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

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

  • происходит чтение класс-файла, т.е проверка корректности формата
  • создается представление класса в Constant pool (Meta space)
  • грузятся супер-классы и супер-интерфейсы; если они не будут загружены, то и сам класс не будет загружен

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

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

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

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

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

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

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

  • Не оптимизирующие
  • Простые оптимизирующие (Hotspot Client): работают быстро, но порождают неоптимальный код
  • Сложные оптимизирующие (Hotspot Server): производят сложные оптимизирующие преобразования прежде чем сформировать байт-код

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

  • Динамические компиляторы
    Работают одновременно с программой, что сказывается на производительности. Важно, чтобы эти компиляторы работали на коде, который часто исполняется. Во время исполнения программы JVM знает, какой код выполняется чаще всего, и, чтобы постоянно не интерпретировать его, виртуальная машина сразу переводит его в команды, которые уже будут исполняться непосредственно на процессорe.
  • Статические компиляторы
    Дольше компилируют, но порождают оптимальный код для исполнения. Из плюсов: не требуют ресурсов во время исполнения программы, каждый метод компилируется с применением оптимизаций.

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

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

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

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

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

  • Стек заполняется и освобождается по мере вызова и завершения новых методов
  • Доступ к этой области памяти осуществляется быстрее, чем к куче
  • Размер стека определяется операционной системой
  • Является потокобезопасным, поскольку для каждого потока создается свой отдельный стек

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

  • Young generation — область, где размещаются недавно созданные объекты
  • Old (tenured) generation — область, где хранятся “долгоживущие” объекты
  • До Java 8 существовала ещё одна область — Permanent generation — которая содержит метаинформацию о классах, методах, статических переменных. После появления Java 8 было решено хранить эту информацию отдельно, вне кучи, а именно в Meta space

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

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

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

  • Когда эта область памяти заполняется полностью, Java бросает java.lang.OutOfMemoryError
  • Доступ к куче медленнее, чем к стеку
  • Для сбора неиспользуемых объектов работает сборщик мусора
  • Куча, в отличие от стека, не является потокобезопасной, так как любой поток может получить к ней доступ

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

public class App < public static void main(String[] args) < int String pName = "Jon"; Person p = null; p = new Person(id, pName); >> class Person < int pid; String name; // constructors, getters/setters >

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

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

Как уже упоминалось, при вызове метода на вершине стека создаётся область памяти, в которой хранятся данные, необходимые этому методу для выполнения.
В нашем случае, это ссылка на класс 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().

Как уже было упомянуто выше, куча разбита на 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.

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

Заключение

В данной статье мы разобрали базовые инструменты языка Java: JVM, JRE, JDK, принцип и этапы выполнения кода на JVM, компиляцию, организацию памяти, а также принцип работы сборщика мусора.

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

Виртуальная машина Java - Java Virtual Machine, или сокращённо JVM

Чтобы пользоваться программным обеспечением, написанным на языке программирования Java или разрабатывать свои собственные программы, понадобится скачать и установить на компьютер виртуальную машину Java — Java Virtual Machine, или сокращённо JVM.

Для программирования на Java можно подобрать себе IDE, хорошим выбором будет NetBeans или Eclipse.

Для начала проверим, установлена ли Java платформа на вашем компьютере.

Для этого запустите удобным для вас способом утилиту для работы с командной строкой.

Например, в Windows XP перейдите в меню «Пуск», выберите «Выполнить», введите «cmd» во всплывающем окне и нажмите «ОК».

В Windows 10 нажмите горячие клавиши Windows + X и выберите пункт «Командная строка» в меню пользователя.

Вы увидите приглашение командной строки с мигающим курсором. Введите команду «java -version», только без кавычек и нажмите Enter.

Если на компьютере уже установлена исполняемая среда Java, вывод будет примерно таким:

java version "1.8.0_111" Java(TM) SE Runtime Environment (build 1.8.0_111-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)

Обратите внимание на первую строку — «1.8.0_111», это и есть версия JVM.

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

Есть два продукта для загрузки:

  • JRE — Java Runtime Environment, предоставляет виртуальную машину и API, подходит, если вы хотите использовать готовые программы на Java.
  • JDK — Java Development Kit, предоставляет виртуальную машину, API и средства разработки программ на Java, необходима, если вы планируете писать свои Java программы.

В рамках данной статьи рассмотрим пример установки JDK.

Загрузка виртуальной машины Java

Скачаем необходимый нам установщик с официального сайта http://www.oracle.com.

Нажимаем красную кнопку и переходим на следующую страницу. Чтобы стала доступной загрузка, нужно согласиться с лицензией — отметьте опцию «Accept License Agreement». После чего выбирайте свою операционную систему и скачивайте файл. Если вы не уверены, какая у вас операционная система, то скорей всего подойдёт файл содержащий в названии «windows-i586».

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

Запускаем установку. Как видим, это новейшая версия на момент написания статьи.

Нажимаем «Next» и переходим к следующему диалогу.

Предлагается выбрать компоненты для установки и путь установки инструментов разработки — JDK.

Оставляем существующие значения.

Ожидаем, пока копируются файлы JDK и получаем запрос на установку Java Runtime Environment — JRE. Соглашаемся и оставляем путь по умолчанию.

Ожидание, пока скопируются файлы JRE.

Предупреждение о сборе информации о текущей установке.

Запрос на установку компонентов JavaFX SDK, которая применяется для выполнения и разработки RIA — Rich Internet Applications, приложений с красивыми пользовательскими интерфейсами, для работы с мультимедиа и пр. на языке JavaFX Script.

Соглашаемся и нажимаем «Next».

Путь установки JavaFX SDK, оставляем как есть и продолжаем.

Процесс копирования файлов JavaFX SDK.

Установка всех компонентов завершена, нажимаем «Close».

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

Виртуальная машина Java

В этой статье мы расскажем, что такое виртуальная машина Java и как ее установить.

Что такое виртуальная машина Java и для чего она нужна

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

Перед тем как мы будем подробнее рассматривать виртуальную машину, разберем, что такое байт-код.

Сам по себе процессор — это сложный калькулятор. У него есть множество ячеек памяти, между которыми проводятся различные математические и байтовые операции. Как проводить каждую операцию, какой будет последовательность действий и какие данные нужны для операции ― всё это записано в машинном коде. Машинный код — это единственный язык, который понимает процессор любого компьютера.

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

  • архитектурой CISC и RISC,
  • длиной команд,
  • режимом адресации,
  • сложностью кодировок инструкций.

Из-за этих различий программы, созданные для одной архитектуры (или одного поколения процессоров), не работают на другой. Поэтому разработчикам приходится перекомпилировать программы для работы на других компьютерах.

Чтобы решить эту проблему, был создан байт-код — своеобразный промежуточный код между машинными языками. Прочитать байт-код может виртуальная машина Java.

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

Как установить виртуальную машину Java

Существует два продукта, с помощью которых можно создать ВМ:

  • Java Runtime Environment (JRE) ― виртуальная машина и API. Подходит, если вы хотите использовать готовые программы на Java.
  • Java Development Kit (JDK) ― виртуальная машина, API и средства разработки программ на Java. Нужна тем, кто планирует писать свои Java-программы.

Как установить JRE

Чаще всего JRE уже есть на многих устройствах. Поэтому перед тем как устанавливать JRE проверьте, есть ли она на устройстве. Для этого зайдите в терминал и введите команду:

java -version

Команда для всех операционных систем одинаковая. Если на вашем устройстве установлена Java, перед вами появится сообщение о версии программы:

Как проверить версию Java

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

Установка ВМ на разных операционных системах похожа. В качестве примера покажем установку на macOS.

Как установить Java 1

В зависимости от вашей операционной системы загрузите установочный файл с официального сайта. Например, если вам нужна виртуальная машина Java для Windows 10 x64, выберите пункт, показанный на картинке ниже:

Как установить Java 2

Откройте папку со скачанным файлом и дважды кликните по нему:

Как установить Java 3

Так как файл скачан из интернета, система попросит у вас разрешение на установку:

Как установить Java 4

Затем система попросит ввести пароль пользователя. Введите его и нажмите OK:

Как установить Java 5

Нажмите Install:

Затем пройдите по подсказкам на экране.

Готово, вы установили Java.

Как установить JDK

Скачайте установочный файл с официальной страницы.

Как установить Java JDK 1

Запустите установку:

Как установить Java JDK 2

Нажмите Продолжить:

Как установить Java JDK 3

Нажмите Установить:

Как установить Java JDK 4

Готово, программа установлена. Нажмите Закрыть:

Помогла ли вам статья?

Спасибо за оценку. Рады помочь ��

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

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