Как работает в джава: Как работает виртуальная машина Java — взгляд изнутри

Содержание

Как работает виртуальная машина Java — взгляд изнутри

Рассказывает Роман Иванов

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

Основной задачей разработчиков Java было создание переносимых приложений. JVM играет центральную роль в переносимости — она обеспечивает должный уровень абстракции между скомпилированной программой и базовой аппаратной платформой и операционной системой. Несмотря на этот дополнительный «слой», скорость работы приложений необычайно высока, потому что байт-код, который выполняет JVM, и она сама отлично оптимизированы.

Рассмотрим схему работы JVM более подробно.

Структура class-файла

Напишем простейшее приложение и скомпилируем его. Компилятор заботливо создаст файл с расширением class и поместит туда всю информацию о нашем мини-приложении для JVM. Что мы увидим внутри? Файл поделён на десять секций, последовательность которых строго задана и определяет всю структуру class-файла.

Файл начинается со стартового (магического) числа: 0xCAFEBABE. Данное число присутствует в каждом классе и является обязательным флагом для JVM: с его помощью система понимает, что перед ней class-файл.

Следующие четыре байта class-файла содержат старший и младший номера версий Java. Они идентифицируют версию формата конкретного class-файла и позволяют JVM проверять, возможна ли его поддержка и загрузка. Каждая JVM имеет ограничение версии, которую она может загрузить — более поздние версии будут игнорироваться. Как видно на примере файла выше, у нас major версия 0x34, что соответствует Java SE 8. Для Java SE 11 будет значение 0x37.

С девятого байта идёт пул констант, в котором содержатся все константы нашего класса. Так как в каждом классе их может быть различное количество, то перед массивом находится переменная, указывающая на его длину, то есть пул констант представляет из себя массив переменной длины. Каждая константа занимает один элемент в массиве. Во всём class-файле константы указываются целочисленным индексом, который обозначает их положение в массиве. Начальная константа имеет индекс 1, вторая константа — 2 и т. д.

Каждый элемент пула констант начинается с однобайтового тега, определяющего его тип. Это позволяет JVM понять, как правильно обработать идущую далее константу. Всего зарезервировано 14 типов констант:

Тип константыЗначение тега
CONSTANT_Class7
CONSTANT_Fieldref9
CONSTANT_Methodref10
CONSTANT_InterfaceMethodref  11
CONSTANT_String8
CONSTANT_Integer3
CONSTANT_Float4
CONSTANT_Long5
CONSTANT_Double6
CONSTANT_NameAndType12
CONSTANT_Utf81
CONSTANT_MethodHandle15
CONSTANT_MethodType16
CONSTANT_InvokeDynamic18

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

Прочитав блок с константами, JVM переходит к следующим двум байтам — флагам доступа, которые определяют, описывает этот файл класс или интерфейс, общедоступный или абстрактный, является ли класс финальным.

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

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

Имя флагаКодОпределение
ACC_PUBLIC0x0001Объявлен публичным
ACC_FINAL0x0010Объявлен финальным
ACC_SUPER0x0020Специальный флаг, введённый в версии Java 1. 1 для совместимости при вызове методов родителя
ACC_INTERFACE0x0200Объявлен интерфейсом
ACC_ABSTRACT0x0400Объявлен абстрактным
ACC_SYNTHETIC0x1000Зарезервированное определение
ACC_ANNOTATION0x2000Объявлен аннотацией
ACC_ENUM0x4000Объявлен перечислением

Подобную структуру имеет и следующий блок — Fields.

Этот блок начинается с двухбайтового параметра количества полей в этом классе или интерфейсе. За ним идёт массив структур переменной длины. Каждая структура содержит информацию об одном поле: имя поля, тип, значение, если это, например, финальная переменная. В списке отображаются только те поля, которые были объявлены классом или интерфейсом, определённым в файле. Поля от родительских классов и имплементированных интерфейсов здесь не присутствуют, они задаются в своих class-файлах.

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

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

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

Мы рассмотрели структуру файлов и готовы перейти к следующей части — загрузке class-файла в JVM и последующему выполнению байт-кода из этого класса. В качестве закрепления полученных знаний по структуре class-файла можете воспользоваться встроенным декомпилятором Java и посмотреть результат его выполнения с ключами -c -verbose (javap -c -verbose TestJava. class).

Загрузка классов

Теперь, разобравшись с общей структурой файла, посмотрим, как JVM его обрабатывает.

Чтобы попасть в JVM, класс должен быть загружен. Для этого существуют специальные классы-загрузчики:

  1. Bootstrap — базовый загрузчик, загружает платформенные классы. Этот загрузчик является родителем всех остальных классов и частью платформы.
  2. Extension ClassLoader — загрузчик расширений, потомок Bootstrap-загрузчика. Загружает классы расширений, которые по умолчанию находятся в каталоге jre/lib/ext.
  3. AppClassLoader — системный загрузчик классов из classpath, который является непосредственным потомком Extension ClassLoader. Он загружает классы из каталогов и jar-файлов, указанных переменной среды CLASSPATH, системным свойством java.class.path или параметром командной строки -classpath.
  4. Собственный загрузчик — у приложения могут быть свои собственные загрузчики.

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

После загрузки класса начинается этап линковки, который делится на три части.

  1. Верификация байт-кода. Это статический анализ кода, выполняется один раз для класса. Система проверяет, нет ли ошибок в байт-коде. Например, проверяет корректность инструкций, переполнение стека и совместимость типов переменных.
  2. Выделение памяти под статические поля и их инициализация.
  3. Разрешение символьных ссылок — JVM подставляет ссылки на другие классы, методы и поля. В большинстве случаев это происходит лениво, то есть при первом обращении к классу.

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

JVM получает один поток байтовых кодов для каждого метода в классе. Байт-код метода выполняется, когда этот метод вызывается в ходе работы программы. Поток байт-кода метода — это последовательность инструкций для виртуальной машины Java. Каждая инструкция состоит из однобайтового кода операции, за которым может следовать несколько операндов. Код операции указывает действие, которое нужно предпринять. Всего на данный момент в Java более 200 операций. Все коды операций занимают только 1 байт, так как они были разработаны компактными, поэтому их максимальное число не может превысить 256 штук.

В основе работы JVM находится стек — основные инструкции работают с ним.

Рассмотрим пример умножения двух чисел. Ниже представлен байт-код метода:

0: iconst_1 // взять число 1, положить в стек
1: istore_1 // сохранить это число в переменную 1 стека метода
2: iconst_5 // взять число 5, положить в стек
3: istore_2 // сохранить его в переменную 2 стека метода
4: iload_1 // положить в стек переменную 1
5: iload_2 // положить в стек переменную 2
6: imul // достать из стека два числа, умножить их и положить в стек
7: istore_3 // взять из стека число и сохранить его в переменную 3

На Java это будет выглядеть так:

int a = 1;
int b = 5;
int c = a * b

По листингу выше можно заметить, что коды операций сами по себе указывают тип и значение. Например, код операции iconst_1 указывает JVM на целочисленное значение, равное единице. Такие байт-коды определены для самых часто используемых констант. Эти инструкции занимают 1 байт и введены специально для повышения эффективности выполнения байт-кода и уменьшения размера его потока. Подобные короткие константы также присутствуют и для других типов данных.

Всего JVM поддерживает семь примитивных типов данных: byte, short, int, long, float, double и char.

Если бы мы хотели положить в переменную а другое значение, например 11112, то нам пришлось бы использовать инструкцию sipush:

0: sipush 11112
3: istore_1

Данные операции выполняются в так называемом фрейме стека метода. У каждого метода есть некоторая своя часть в общем стеке. Таким образом в нашем главном потоке исполнения программы создаются множество подстеков на каждый вызов метода. Более наглядно это представлено на картинке ниже:

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

Чтобы достучаться до пула констант класса и получить нужное значение, используются инструкции lcd и lcd_w. При этом lcd может ссылаться только на константы с индексами от 1 до 255, поскольку размер её операнда составляет всего 1 байт. Lcd_w имеет 2-байтовый индекс, поэтому может ссылаться на более широкий диапазон индексов.

Вызовы методов

Java предоставляет два основных вида методов: методы экземпляра и методы класса. Методы экземпляра используют динамическое (позднее) связывание, тогда как методы класса используют статическое (раннее) связывание.

Виртуальная машина Java вызывает метод класса, выбирая его на основании типа ссылки на объект, который всегда известен во время компиляции. С другой стороны, когда виртуальная машина вызывает метод экземпляра, она выбирает метод для вызова на основе фактического класса объекта, который может быть известен только во время выполнения. Поэтому для вызова методов используются разные инструкции: invokevirtual и invokestatic. Данные функции ссылаются на запись в пуле констант в виде полного пути к необходимой функции. Виртуальная машина снимает нужное количество переменных со стека и передает в метод.

Возвращаемое методом значение кладётся на стек. Типы возвращаемых значений методов указаны ниже:

ОперацияОписание
ireturnПомещает на стек значение типа int
lreturnПомещает на стек значение long,
freturnПомещает на стек значение float
dreturnПомещает на стек значение double
areturnПомещает на стек значение object
returnНе изменяет стек

Циклы

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

int i = 1000;
while (i < 9999) {
   i += 10;
}

Байт-код:

0: sipush        1000
3: istore_1
4: iload_1
5: sipush        9999
8: if_icmpge     17
11: iinc          1, 10
14: goto          4
17: return

Каждый раз на стеке оказывается два числа, которые сравниваются, и если i > 9999, происходит выход из цикла. При этом для создания цикла используется конструкция на основе goto, которая запрещена в самом языке Java, хотя ключевое слово и зарезервировано.

Заключение

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

Таким образом, мы поверхностно рассмотрели жизненный цикл байткода в JVM: class-файлы, их загрузку и выполнение байт-кода и базовые инструкции.

Что такое JVM? Знакомство с виртуальной машиной Java

Java virtual machine (JVM) — это программа, которая разработана для выполнения и запуска других программ на основе Java. В основе JVM лежит простая и гениальная идея, которая всегда останется одним из величайших примеров программирования в стиле кунг-фу. JVM может также использоваться для выполнения программ, написанных на других языках программирования. Подробно рассказываем, как работает JVM, для чего используется эта технология и почему она является одним из главных компонентов в платформе Java. Материал основан на статье Java-разработчика Matthew Tyson «What is the JVM? Introducing the Java Virtual Machine».

  • Для чего используется Java virtual machine
  • Кто разрабатывает и обслуживает JVM?
  • Сборка мусора
  • Три главные части JVM
    • Спецификация JVM
    • Реализация JVM
    • Экземпляр JVM
  • Загрузка и выполнение class-файлов в JVM
    • Загрузчик классов в JVM
    • Механизм выполнения в JVM
  • Управление системными ресурсами
  • Эволюция JVM: прошлое, настоящее, будущее

Для чего используется Java virtual machine

JVM имеет две основные функции:

  1. Позволяет запускать программы, написанные на Java, на любых устройствах или операционных системах. Так реализуется принцип Java — «Написал один раз, запускай везде».
  2. Управляет и оптимизирует память, которую используют программы.

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

Существует два основных определения JVM — техническое и повседневное:

  • Техническое определение: JVM — это софт, который выполняет код и предоставляет среду для его выполнения.
  • Повседневное определение: JVM — это способ запуска наших Java-приложений. Мы настраиваем параметры JVM, а потом полагаемся на ее автоматическое управление ресурсами во время выполнения.

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

Читайте также:
Язык программирования Java: особенности, популярность, ситуация на рынке труда

Кто разрабатывает и обслуживает JVM?

На сегодняшний день JVM массово используется и развивается в разных проектах — как коммерческих, так и Open Sourse. Например, существует проект OpenJDK, который представляет собой полностью совместимый Java Development Kit, состоящий исключительно из свободного и открытого исходного кода. При этом, несмотря на открытость кода этого проекта, его разработкой практически полностью занимается корпорация Oracle.

Сборка мусора

В Java памятью управляет JVM с помощью процесса, который называется сборкой мусора — он непрерывно определяет и удаляет неиспользуемую память в Java-приложениях. Сборка мусора происходит внутри работающей JVM.

В начале существования Java подвергалась серьезной критике за то, что не была «Close to the metal» как C++, поэтому не была такой быстрой. Особенно спорным критики называли процесс сборки мусора. С тех пор были предложены и использованы различные алгоритмы и подходы, которые значительно улучшили и оптимизировали сборку мусора.

Три главные части JVM

JVM состоит из трех основных частей: спецификация, реализация и экземпляр. Рассмотрим каждую из них.

Спецификация JVM

Первая часть JVM — спецификация, которая до конца не определяет все детали реализации виртуальной машины. Это значит, что остается максимальная свобода творчества для разработчика, который работает с ней. Чтобы правильно реализовать виртуальную машину Java, вам нужно всего лишь уметь читать class-файлы и правильно выполнять указанные в них операции.

Итак, все, что должна делать JVM — правильно запускать Java-программы. Это может показаться достаточно простым процессом, однако это очень масштабная задача, учитывая мощность и гибкость языка Java.

Реализация JVM

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

Экземпляр JVM

После того, как спецификация JVM реализована и выпущена в качестве самостоятельной программы, вы можете загрузить ее как приложение. Эта загруженная программа является экземпляром виртуальной машины.

Чаще всего, когда разработчики говорят о JVM, они имеют ввиду экземпляр JVM, который работает в среде разработки. Вы можете сказать: «Привет, сколько памяти использует JVM на этом сервере?» или «Я не могу поверить, что сделал зацикленный вызов, а переполнение стека сломало мою JVM. А ведь это просто ошибка новичка!»

Загрузка и выполнение class-файлов в JVM

Мы говорили о роли JVM в запуске Java-приложений, но как виртуальная машина выполняет свою функцию? Для запуска Java-приложений JVM зависит от загрузчика классов и механизма выполнения Java.

Загрузчик классов в JVM

Все в Java — классы, и все Java-приложения состоят из классов. Любое приложение может состоять из одного или многих тысяч классов. Чтобы запустить Java-приложение, JVM должна загрузить скомпилированные .class-файлы в контекст — например, в сервер, где они будут доступны. JVM зависит от своего загрузчика класса для корректного выполнения этой функции.

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

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

Механизм выполнения в JVM

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

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

Управление системными ресурсами

Системные ресурсы могут быть разделены на две больших категории: память и все остальное.

JVM отвечает за очистку неиспользуемой памяти, при этом сборщик мусора — это механизм, который и осуществляет этот процесс. JVM также отвечает за распределение и поддержание ссылочной структуры, которую любой разработчик принимает как само собой разумеющееся. Например, механизм выполнения JVM отвечает за то, что при использовании ключевого слова new происходит запрос к операционной системе на выделение памяти.

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

Эволюция JVM: прошлое, настоящее, будущее

В 1995 году разработчики JVM представили две революционные концепции, которые с тех пор стали стандартом в разработке: «Написал один раз, запускай везде» и автоматическое управление памятью. В то время совместимость софта была смелой концепцией, но сейчас это стало нормой. Точно так же, как современное поколение живет с автоматической сборкой мусора.

Можно сказать, что если Джеймс Гослинг и Брендан Эйх изобрели современное программирование, то тысячи других разработчиков усовершенствовали и развили их идеи в последующие десятилетия. Изначально виртуальная машина Java предназначалась только для Java, но сегодня она эволюционировала до поддержки многих языков программирования, включая Scala, Groovy и Kotlin.

Изучайте Java на Хекслете
Вступайте в профессию и изучайте один из самых востребованных в энтерпрайзе языков программирования.

Что такое Java?—Руководство по Java для начинающих

Руководство по Java для начинающих | Microsoft Azure

Что такое Java?

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

Вот черты, которые определили язык программирования Java и сделали его таким вездесущим. Java:

Многоплатформенность: Java была отмечена лозунгом «напиши один раз, работай где угодно» (или WORA), который остается актуальным и сегодня. Программный код Java, написанный для одной платформы, такой как операционная система Windows, может быть легко перенесен на другую платформу, например ОС устройства, и наоборот без полной перезаписи. Java работает на нескольких платформах, поскольку при компиляции Java-программы компилятор создает файл байт-кода .class, который может работать в любой операционной системе, на которой установлена ​​виртуальная машина Java (JVM). Как правило, JVM легко установить в большинстве основных операционных систем, включая iOS, что не всегда было так.

Объектно-ориентированный: Java был одним из первых объектно-ориентированных языков программирования. Язык объектно-ориентированного программирования организует свой код вокруг классов и объектов, а не функций и команд. Большинство современных языков программирования, включая C++, C#, Python и Ruby, являются объектно-ориентированными.

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

Когда была создана Java?

Java был изобретен Джеймсом Гослингом в 1995 году, когда он работал в Sun Microsystems. Несмотря на то, что Java быстро завоевал популярность после своего выпуска, он не начинал как мощный язык программирования, которым он является сегодня.

Разработка того, что впоследствии стало Java, началась в Sun Microsystems в 1991 году. Проект, первоначально называвшийся Oak, изначально был разработан для интерактивного телевидения. Когда Oak сочли слишком продвинутым для цифровой кабельной технологии, доступной в то время, Гослинг и его команда переключили свое внимание на создание языка программирования и переименовали проект в Java в честь сорта кофе из Индонезии. Гослинг рассматривал Java как шанс решить проблемы, которые, как он ожидал, возникнут для менее переносимых языков программирования по мере того, как все больше устройств будут объединены в сеть.

Язык Java был разработан с использованием синтаксиса, аналогичного языку программирования C++, поэтому он уже был знаком программистам, когда они начали его использовать. С лозунгом «написать один раз, запускать где угодно» в своей основе программист мог написать код Java для одной платформы, который будет работать на любой другой платформе, на которой установлен интерпретатор Java (т. е. виртуальная машина Java). С появлением Интернета и распространением новых цифровых устройств в середине 1990-х годов разработчики быстро восприняли Java как действительно многоплатформенный язык программирования.

Первая общедоступная версия Java, Java 1.0, была выпущена в 1996 году. В течение пяти лет у нее было 2,5 миллиона разработчиков по всему миру. Сегодня Java поддерживает все, от мобильной операционной системы Android до корпоративного программного обеспечения.

Для чего используется язык программирования Java?

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

Мобильные приложения

Многие, если не большинство, мобильных приложений созданы на Java. Java является предпочтительным языком разработчиков мобильных приложений из-за его стабильной платформы и универсальности. Популярные мобильные приложения, написанные на Java, включают Spotify, Signal и Cash App.

Веб-приложения

На языке Java разрабатывается широкий спектр веб-приложений. Twitter и LinkedIn являются одними из самых известных.

Корпоративное программное обеспечение

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

Игры

Популярные игры, написанные на языке программирования Java, включают оригинальный Minecraft и RuneScape.

IoT-приложения

IoT-приложения есть везде: умные телевизоры, автомобили, тяжелая техника, рабочие объекты и т. д., и Java используется для программирования многих из них. Java — популярный выбор для разработчиков IoT из-за того, насколько легко его код может быть перенесен между платформами.

Что такое JavaScript и чем он отличается от Java?

В отличие от Java, у JavaScript есть единственная функция: создание скриптов для запуска веб-браузеров. Эти скрипты есть во всем интернете. Среди прочего, они используются для браузерных игр, анимации веб-страниц, регистрации поведения пользователей и всплывающей рекламы. По сути, все, что обновляется на веб-сайте без перезагрузки страницы, скорее всего, является JavaScript.

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

Как работает Java?

Как объяснялось ранее, Java — это многоплатформенный язык программирования. Это означает, что его можно написать для одной ОС, а запустить на другой. Как это возможно?

Код Java сначала пишется в пакете Java Development Kit, который доступен для Windows, Linux и macOS. Программисты пишут на языке программирования Java, который комплект переводит в компьютерный код, который может быть прочитан любым устройством с соответствующим программным обеспечением. Это достигается с помощью программного обеспечения, называемого компилятором. Компилятор берет высокоуровневый компьютерный код, такой как Java, и переводит его на язык, который понимают операционные системы, называемый байт-кодом.

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

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

Изучите программирование на Java

Итак, что означает Java для начинающих программистов? С точки зрения стоящей инвестиции, чтобы учиться: много. Несмотря на то, что он существует уже более 20 лет, он остается ведущим языком программирования, потому что:

  • Java исключительно универсален, используется во многих различных отраслях и операционных системах, и операционная система Android основана на нем.
  • Java прост в изучении и считается отличным первым языком для изучения основ программирования.
  • Учебники по Java, учебные курсы и онлайн-сообщества легко найти — легко начать работу и получать постоянную поддержку по мере приобретения опыта работы с Java.

Может быть полезно разделить изучение Java на два этапа: во-первых, научиться программировать на Java, а во-вторых, научиться использовать язык в различных средах разработки. Это важно, потому что даже специалистам по Java необходимо научиться использовать инструменты и среды Java, с которыми они знакомы, в разных местах.

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

Учебники по Java для начинающих

Microsoft Learn: Java для начинающих

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

Microsoft Learn: памятки для разработчиков Java

Эти памятки содержат краткие справочники по Java и связанным с ней технологиям, включая язык Java, параметры JVM, аннотации Spring, Maven, Gradle, IntelliJ и Git.

Udemy: изучите программирование на Java — от новичка до мастера

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

Образовательный: изучайте Java с нуля

Этот бесплатный 12-часовой интерактивный учебник по Java начинается с простого «Привет, мир!» урок, продвигает основные концепции программирования и завершается оценочным экзаменом.

Coursera: специализация по основам программирования на Java и программной инженерии

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

Учебники и ресурсы по Java для опытных пользователей

Блог Java

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

Java-разработка с Microsoft

Ознакомьтесь с SDK, API, расширениями, OpenJDK и расширенными учебными ресурсами для Java, чтобы получить максимальную отдачу от Java.

Java в Azure

Найдите все необходимое, чтобы начать разработку и модернизацию корпоративных приложений Java в Azure, включая поддержку Java EE, Spring Boot и Kubernetes.

Начало работы с Java в Azure

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

Часто задаваемые вопросы

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

    Узнать больше

  • Java был создан Джеймсом Гослингом в 1995 году, когда он работал в Sun Microsystems. Разработка Java началась в 1991 году, а первая общедоступная версия была выпущена в январе 1996 года.

    Подробнее

  • Да, Java — это язык программирования, на котором работают приложения, ОС для смартфонов, корпоративное программное обеспечение и многие другие известные программы.

    Узнать больше

  • Язык программирования Java используется на разных платформах и устройствах благодаря легко переносимому коду. Популярное использование Java включает корпоративное программное обеспечение, разработку мобильных приложений, веб-приложения, облачные приложения, игры и приложения IoT.

    Узнать больше

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

    Узнать больше

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

    Узнать больше

  • Помимо традиционного школьного обучения существует множество вариантов изучения Java. Coursera, Udemy и многие другие компании предлагают сертификаты Java, которые можно получить менее чем за 6 месяцев. Есть также бесплатные учебные пособия, видео и курсы, доступные в Интернете.

    Узнать больше

Начните разработку с помощью Java в Azure бесплатно

Получите популярные службы бесплатно в течение 12 месяцев и более 40 других служб всегда бесплатно — плюс кредит в размере 200 долларов США для использования в течение первых 30 дней.

Попробуйте Azure бесплатно

Ознакомьтесь со всеми ресурсами Microsoft по Java

Узнайте, как создавать и развертывать приложения и службы Java с использованием технологий Microsoft.

Исследуйте ресурсы

Мы можем вам помочь?

Что такое Java и как она работает? Обзор и варианты использования

Без категорий

Раджеш Кумар
7 марта 2022 г.

Что такое Java?

Java — это высокоуровневый, основанный на классах, объектно-ориентированный язык программирования.
Это простой язык программирования. Java упрощает написание, компиляцию и отладку программ. Это помогает создавать повторно используемый код и модульные программы.

Java спроектирован таким образом, чтобы иметь как можно меньше зависимостей от реализации Язык программирования общего назначения, созданный для разработчиков, чтобы написать его после запуска в любом месте, скомпилированный код Java может работать на всех платформах, поддерживающих Java. Приложения Java компилируются в байтовый код, который может работать на любой виртуальной машине Java. Синтаксис Java подобен C/C++.

История

Джеймс Гослинг, Майк Шеридан и Патрик Нотон инициировали проект языка Java в июне 1991.[23] Первоначально Java был разработан для интерактивного телевидения, но в то время он был слишком продвинут для индустрии цифрового кабельного телевидения.

Java — это язык программирования, созданный в 1991 году. Джеймс Гослинг, Майк Шеридан и Патрик Нотон, группа инженеров Sun, известная как команда Green, инициировала язык Java в 1991 году. Sun Microsystems выпустила свою первую общедоступную реализацию в 1996 году как Java 1.0. . Он обеспечивает бесплатное время работы на популярных платформах. Компилятор Java1.0 был переписан на Java Артуром Ван Хоффом, чтобы строго соответствовать его спецификациям. С появлением Java 2 в новых версиях было создано несколько конфигураций для разных типов платформ.

Java is used for

  • GUI applications
  • Web servers and applications servers
  • Middleware applications
  • Web applications
  • Mobile applications
  • Embedded systems
  • Enterprise applications
  • It is used for developing Android Apps
  • Helps вам для создания корпоративного программного обеспечения
  • Широкий спектр мобильных приложений Java
  • Приложения для научных вычислений
  • Использование для анализа больших данных
  • Java-программирование аппаратных устройств
  • Используется для серверных технологий, таких как Apache, JBoss, GlassFish и т. д.

Официальный сайт java Компания

Джеймс Гослинг

последняя версия Java

Java SE 18

Возможности Java

Вот некоторые важные особенности Java:

  • Это высокопроизводительный язык программирования
  • Это один из самых простых в использовании языков программирования.
  • Java — это объектно-ориентированные языки программирования.
  • Один раз напишите код и запустите его практически на любой вычислительной платформе.
  • Java не зависит от платформы. Некоторые программы, разработанные на одной машине, могут выполняться на другой машине.
  • Безопасные языки программирования
  • Предназначен для создания объектно-ориентированных приложений.
  • Это многопоточный язык с автоматическим управлением памятью.
  • Создан для распределенной среды Интернет.
  • Облегчает распределенные вычисления, поскольку они ориентированы на сеть.

Преимущество Java

  • Простота и легкость в освоении.
  • Объектно-ориентированный язык программирования.
  • Многопоточность поддерживается Java.
  • Независимый от платформы язык.
  • Безопасная платформа.

Компоненты Java

  • Комплект для разработки Java (JDK)

JDK — это среда разработки программного обеспечения, используемая для создания апплетов и приложений Java. Полная форма JDK — это Java Development Kit. Разработчики Java могут использовать его в Windows, macOS, Solaris и Linux. JDK помогает им кодировать и запускать Java-программы.

  • Виртуальная машина Java (JVM)

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

  • Среда выполнения Java (JRE)

JRE — это часть программного обеспечения, предназначенная для запуска другого программного обеспечения. Он содержит библиотеки классов, класс загрузчика и JVM. Проще говоря, если вы хотите запустить программу на Java, вам нужна JRE. Если вы не программист, вам не нужно устанавливать JDK, а достаточно JRE для запуска Java-программ.

Альтернатива Java

  • Язык C
  • Go
  • Python
  • Scala
  • Kotlin
  • JavaScript
  • Java EE

Терминология Java

Следующие термины являются обычными в разработке применения Java в Оракуле.

Архитектура Java

Интегрирует процесс интерпретации и компиляции. Архитектура Java объясняет каждый шаг компиляции и выполнения программы.

Архитектуру Java можно объяснить, выполнив следующие шаги:

  • В Java существует процесс компиляции и интерпретации.
  • Компилятор Java преобразует код Java в байтовый код.
  • После этого JVM преобразует байт-код в машинный код.
  • Затем машина выполняет машинный код.

Hello world пример

Традиционная программа Hello world может быть написана на Java как:

Лучшие ресурсы, учебник и руководство по java

Лучшие курсы и институт обучения

Если вам нужен сертификационный курс для такого лучшего курса. Поэтому, пожалуйста, посетите «Devopsschool.com». Здесь вы найдете больше сертификационных курсов.

  • Автор
  • Последние сообщения

Раджеш Кумар

Наставник по DevOps — DevSecOps — SRE — Cloud — Container & Micorservices в Cotocus

Присоединяйтесь к моим следующим сертификационным курсам…0203 — Сертифицированные специалисты по проектированию надежности сайтов (SRECP)
— Магистр DevOps Engineering (MDE)
— Сертифицированные специалисты DevSecOps (DSOCP)
URL — https://www.

This entry was posted in Популярное