Java se development kit что это за программа
JDK (так же известен как Java Development Kit и Java SE) - один из ключевых пакетов инструментов для разработки программного обеспечения на платформе Java, включающий в себя виртуальную машину, исполнительную систему Java Runtime Environment, библиотеки классов, документацию, а так же компилятор javac.
Начинающие разработчики часто путают между собой пакеты JVM, JRE и JDK, да и в принципе слабо представляют, чем они различаются, поэтому внесём немного ясности в этот вопрос:
- JVM (Java Virtual Machine) - это виртуальная машина Java, исполняющая байт-код, который создаётся из исходных текстов компилятором javac. (Java Runtime Environment) - минимальная среда выполнения, в которую входит JVM и библиотеки Java-классов. Именно этот пакет обязательно нужно устанавливать на компьютер с «чистой» операционной системой Windows, чтобы корректно выполнялись приложения написанные на Java.
- JDK (Java Development Kit) - бесплатный пакет для разработчиков, состоящий из JRE и средств разработчика, в которые входят компилятор javac, различные утилиты, документация и примеры. Так же сами пакеты JDK бывают нескольких различных модификаций:
- Java SE Development Kit - стандартный комплект (Standard Edition) для разработки приложений для настольных компьютеров и серверов;
- Java ЕЕ Development Kit - комплект Enterprise Edition, с дополнительными инструментами для разработки корпоративных приложений;
- Java ME Development Kit - компактная версия платформы (Micro Edition), в основном предназначенная для разработки приложений для встраиваемых и мобильных устройств.
Являясь новичком в программировании, используйте Java SE Development Kit, который подходит для большинства целей, при необходимости можно в любой момент переключиться на более подходящий пакет. При этом нужно понимать, что в Java Development Kit не входит непосредственно редактор кода и для написания программ нужно использовать стороннюю интегрированную среду разработки, например, вполне подойдут бесплатные Eclipse, Brackets или NetBeans IDE.
В данный момент для скачивания доступны Java SE Development Kit 8, 11 и 13, однако учитывая полную обратную совместимость, лучше всего использовать самую последнюю версию или версию с пометкой LTS, которая имеет наиболее длительный период поддержки. Кроме того, последняя версия JDK содержит в себе наиболее актуальный функционал, который невозможно использовать в предыдущих версиях пакета.
Java Development Kit - это бесплатно распространяемый комплект разработчика приложений на языке Java. Он включает в себя компилятор Java (javac), стандартные библиотеки классов Java, примеры, документацию, различные утилиты и исполнительную систему Java (JRE). Распространитель комплекта - это компания Oracle Corporation (ранее называлась Sun Microsystems). В состав JDK не входит интегрированная среда разработки на Java, поэтому разработчик, использующий только JDK, вынужден использовать внешний текстовый редактор и компилировать свои программы, используя утилиты командной строки.
Содержание
История
Компания Sun Microsystems активно развивала и обновляла JDK, почти каждый год выходили новые версии. В 1996 г. была выпущена первая версия — JDK 1.0, которая модифицировалась до версии с номером 1.0.2. В этой версии библиотека классов Java API содержала 8 пакетов. Весь набор JDK 1.0.2 поставлялся в упакованном виде в одном файле размером около 5 Мбайт, а после распаковки занимал на диске около 8 Мбайт.
В 1997 г. появилась версия JDK 1.1, последняя ее модификация, 1.1.8, выпущена в 1998 г. В этой версии было 23 пакета классов, занимала она 8,5 Мбайт в упакованном виде и около 30 Мбайт — в распакованном. В первых версиях JDK все пакеты библиотеки Java API были упакованы в один архивный файл classes.zip и вызывались непосредственно из этого архива, его не нужно было распаковывать. Затем набор инструментальных средств JDK был сильно переработан.
Версия JDK 1.2 вышла в декабре 1998 г. и содержала уже 57 пакетов классов. В архивном виде это файл размером почти 20 Мбайт и еще отдельный файл размером более 17 Мбайт с упакованной документацией. Полная версия располагается на 130 Мбайт дискового пространства, из них около 80 Мбайт занимает документация. Начиная с этой версии, все продукты технологии Java собственного производства компания Sun стала называть Java 2 Platform, Standard Edition, сокращенно J2SE, а в литературе утвердилось название Java 2. Кроме 57 пакетов классов, обязательных на любой платформе и получивших название Core API, в Java 2 JDK 1.2 входят еще дополнительные пакеты классов, называемые en:Standard Extension API.
В версии J2SE JDK 1.5.0, вышедшей в конце 2004 г., было уже под сотню пакетов, составляющих Core API (Application Programming Interface). В упакованном виде — это файл размером около 46 Мбайт и необязательный файл с упакованной документацией такого же размера. В это же время произошло очередное переименование технологии. Из версии убрали первую цифру и стали писать Java 2 Platform, Standard Edition 5.0, сокращенно J2SE 5.0 и JDK 5.0, хотя во внутрифирменной документации сохраняется название JDK 1.5.0. Последнее обновление J2SE 5.0, JDK 1.5.0_22, было выпущено 3 ноября 2009 года.
В шестой версии, вышедшей в начале 2007 г., из названия технологии убрали цифру 2 и стали писать Java Platform, Standard Edition 6, сокращенно — Java SE 6 и JDK 6. Впрочем, во внутрифирменной документации остается прежнее обозначение, например последнее на момент написания книги обновление обозначается JDK 1.6.0_26. Летом 2011 года появилась седьмая версия Java SE 7 и распространяется JDK 1.7.0.
Java SE JDK создается для каждой платформы: MS Windows, Solaris, Linux, отдельно, а документация написана на языке HTML и одинакова на всех платформах [Источник 1] .
Программы и классы, входящие в JDK
Набор программ и классов JDK содержит:
- компилятор из исходного текста в байт-коды javac;
- интерпретатор java, содержащий реализацию en:JVM;
- облегченный интерпретатор jre (в последних версиях отсутствует);
- программу просмотра апплетов appletviewer, заменяющую браузер;
- отладчик jdb;
- дизассемблер javap;
- программу архивации и сжатия jar;
- программу сбора и генерирования документации en:javadoc;
- программу генерации заголовочных файлов языка C для создания "родных" методов javah;
- программу генерации электронных ключей keytool;
- программу native2ascii, преобразующую бинарные файлы в текстовые;
- программы rmic иrmiregistry для работы с удаленными объектами;
- программу serialver, определяющую номер версии класса;
- библиотеки и заголовочные файлы "родных" методов;
- библиотеку классов Java API (en:Application Programming Interface).
Версии
JDK имеет следующие версии:
- JDK 1.0 (23.01.1996).
- JDK 1.1 (19.02.1997).
- J2SE 1.2 (08.12.1998).
- J2SE 1.3 (08.05.2000).
- J2SE 1.4 (06.02.2002).
- J2SE 5.0 (30.09.2004).
- Java SE 6 (11.12.2006).
- Java SE 7 (07.07.2011).
- Java SE 8 (18.03.2014).
- Java SE 9 (21.09.2017).
- Java SE 10 (20.03.2018).
- Java SE 11 (25.09.2018).
- Java SE 12 (19.03.2019).
Различие между JDK, SDK и ADK
en:SDK - это стандартный набор для разработки. Это не относится к Java, так как вы можете иметь SDK практически для любого языка. Это в значительной степени просто термин для пакета, в котором есть инструменты для создания материала с использованием его связанного языка.
JDK - это комплект разработки Java. Это то, что вы будете использовать для разработки Java-приложений. Он содержит файлы jar, библиотеки и инструменты, позволяющие вам писать и компилировать java-файлы, которые могут работать в JRE (среда выполнения java). Если в вашей системе установлен только JDK, то вам будет сложно разрабатывать для Android, так как пакеты с ключами отсутствуют. Вы должны будете установить их самостоятельно.
en:ADK - это комплект разработчика Android. По сути, это Java, но он настроен под код en:Android. Он также содержит поддержку эмуляторов и инструментов для разработки приложений для Android. Вы можете писать обычные Java-приложения OLE с помощью ADK, поскольку по своей сути это Java. Просто есть много других классов, которые работают специально для разработки Android. [Источник 2] .
Разница между JDK и JRE
"JDK" является Java Development Kit. То есть, это комплект JDK программного обеспечения, которое можно использовать для разработки Java Based программного обеспечения. "JRE" является Java Runtime Environment. То есть, en:JRE это реализация виртуальной машины Java, которая в действительности выполняет Java программы.
Как правило, каждый JDK содержит одно (или более) JRE's наряду с различными инструментами развития, такие как компиляторы Java источник, комплектации и средств развертывания, отладчиков, развитие библиотек и т.д [Источник 3] .
Ни для кого не секрет, что на данный момент 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
- Доступ к куче медленнее, чем к стеку
- Для сбора неиспользуемых объектов работает сборщик мусора
- Куча, в отличие от стека, не является потокобезопасной, так как любой поток может получить к ней доступ
Основываясь на информации выше, рассмотрим, как происходит управление памятью на простом примере:
У нас есть класс 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 дефрагментируется, т.е. последовательно заполняется нужными объектами.
Изучите различия между Oracle Java Development Kit и OpenJDK.
1. введение
В этой статье мы рассмотрим различия между Oracle Java Development Kit и OpenJDK . Сначала мы быстро рассмотрим каждый из них, а затем проведем сравнение. После этого мы увидим список других реализаций JDK.
Дальнейшее чтение:
Установка Java в Ubuntu
Разница между JVM, JRE и JDK
2. История Oracle JDK и Java SE
Oracle настоятельно рекомендует использовать термин JDK для обозначения комплекта разработки Java SE (Standard Edition) (существуют также платформы Enterprise Edition и Micro Edition).
Давайте взглянем на историю Java SE:
- Бета – версия JDK-1995
- JDK 1.0 – январь 1996
- JDK 1.1 – февраль 1997
- J2SE 1.2 – декабрь 1998 года
- J2SE 1.3 – май 2000 года
- J2SE 1.4 – февраль 2002
- J2SE 5.0 – сентябрь 2004
- Java SE 6 – декабрь 2006
- Java SE 7 – Июль 2011
- Java SE 8 (LTS) – Март 2014
- Java SE 9 – Сентябрь 2017
- Java SE 10 (18.3) – Март 2018
- Java SE 11 (18,9 LTS) – Сентябрь 2018
- Java SE 12 (19.3) – Март 2019
Примечание: версии, выделенные курсивом, больше не поддерживаются.
Мы видим, что основные выпуски Java SE выходили примерно каждые два года до Java SE 7. Потребовалось пять лет, чтобы перейти с Java SE 6, и еще три, чтобы достичь Java SE 8 позже.
Начиная с Java SE 10, мы можем ожидать новых релизов каждые шесть месяцев. Однако не все выпуски будут выпусками с долгосрочной поддержкой (LTS). В соответствии с планом выпуска Oracle выпуск продукта LTS будет происходить только каждые три года.
Java SE 11 является последней версией LTS, а Java SE 8 будет получать бесплатные общедоступные обновления до декабря 2020 года для некоммерческого использования.
Этот набор для разработки получил свое нынешнее название после того, как Oracle купила Sun Microsystems в 2010 году. До этого его называли SUN JDK, и это была официальная реализация языка программирования Java.
3. OpenJDK
OpenJDK-это бесплатная реализация платформы Java SE с открытым исходным кодом. Первоначально он был выпущен в 2007 году в результате разработки, которую Sun Microsystems начала в 2006 году.
Конечно, мы должны подчеркнуть, что OpenJDK является официальной эталонной реализацией стандартной версии Java начиная с версии SE 7 .
Изначально он был основан только на JDK 7. Но, начиная с Java 10, за справочную реализацию платформы Java SE с открытым исходным кодом отвечает проект JDK . И, как и в случае с Oracle, проект JDK также будет выпускать новые версии функций каждые шесть месяцев.
Мы должны отметить, что до этого продолжительного проекта были проекты выпуска JDK, которые выпустили одну функцию, а затем были прекращены.
Давайте теперь проверим версии OpenJDK:
- Проект OpenJDK 6 основан на JDK 7, но изменен для обеспечения версии Java 6 с открытым исходным кодом
- Проект OpenJDK 7 – 28 Июля 2011 года
- Проект OpenJDK 7u – этот проект разрабатывает обновления для Java Development Kit 7
- Проект OpenJDK 8 – 18 марта 2014 года
- Проект OpenJDK 8u – этот проект разрабатывает обновления для Java Development Kit 8
- Проект OpenJDK 9 – 21 Сентября 2017
- Выпуск проекта JDK 10-20 марта 2018 г.
- Выпуск проекта JDK 11-25 сентября 2018 г.
- Выпуск проекта JDK 12 – Фаза стабилизации
4. Oracle JDK против OpenJDK
В этом разделе мы сосредоточимся на ключевых различиях между Oracle JDK и OpenJDK.
4.1. График выпуска
Как мы уже упоминали, Oracle будет выпускать релизы каждые три года, в то время как OpenJDK будет выпускаться каждые шесть месяцев .
Oracle обеспечивает долгосрочную поддержку своих выпусков. С другой стороны, OpenJDK поддерживает изменения в выпуске только до тех пор, пока не будет выпущена следующая версия.
4.2. Лицензии
Oracle JDK был лицензирован в соответствии с Лицензионным соглашением Oracle с двоичным кодом , в то время как OpenJDK имеет Общую публичную лицензию GNU (GNU GPL) версии 2 с исключением ссылок .
При использовании платформы Oracle существуют некоторые последствия для лицензирования. Общедоступные обновления для Oracle Java SE 8, выпущенные после января 2019 года, не будут доступны для делового, коммерческого или производственного использования без коммерческой лицензии, как объявила Oracle |. Однако OpenJDK является полностью открытым исходным кодом и может использоваться свободно.
4.3. Производительность
Между ними нет реальной технической разницы, поскольку процесс сборки Oracle JDK основан на процессе OpenJDK .
Когда дело доходит до производительности, Oracle намного лучше с точки зрения быстродействия и производительности JVM . Она уделяет больше внимания стабильности из-за важности, которую она придает своим корпоративным клиентам.
OpenJDK, напротив, будет чаще выпускать релизы. В результате мы можем столкнуться с проблемами нестабильности. Основываясь на отзывах сообщества , мы знаем, что некоторые пользователи OpenJDK сталкивались с проблемами производительности.
4.4. Особенности
Если мы сравним функции и опции, мы увидим, что в продукте Oracle есть регистратор полетов, управление полетами Java и функции совместного использования данных класса приложений , в то время как OpenJDK имеет функцию отображения шрифтов .
Кроме того, Oracle имеет больше возможностей для сбора мусора и лучшие средства визуализации.
4.5. Развитие и популярность
Oracle JDK полностью разработан корпорацией Oracle , в то время как OpenJDK разработан Oracle, OpenJDK и сообществом Java . Однако в его разработке также принимают активное участие такие первоклассные компании, как Red Hat, Azul Systems, IBM, Apple Inc., SAP AG.
Как мы видим по ссылке из предыдущего подраздела, когда речь заходит о популярности у ведущих компаний, которые используют наборы для разработки Java в своих инструментах, таких как Android Studio или IntelliJ IDEA, раньше более предпочтительным был Oracle JDK, но оба они перешли на JetBrains на основе OpenJDK сборки .
С другой стороны, основные дистрибутивы Linux (Fedora, Ubuntu, Red Hat Enterprise Linux) предоставляют OpenJDK в качестве реализации Java SE по умолчанию.
5. Изменения, Произошедшие С Java 11
Как мы можем видеть в блоге Oracle , есть некоторые важные изменения, начиная с Java 11.
Каждая лицензия будет иметь разные сборки, но они будут функционально идентичны, с некоторыми отличиями в косметике и упаковке.
Давайте рассмотрим основные отличия:
6. Другие реализации JDK
Давайте теперь быстро взглянем на другие активные реализации Java Development Kit.
6.1. Бесплатный и открытый исходный код
Следующие реализации, перечисленные в алфавитном порядке, являются открытыми и бесплатными для использования:
- AdoptOpenJDK
- Amazon Правильно
- Azul Zulu
- Bck2Brwsr
- CACAO
- Кодовое имя Один
- ДоппиоЙВМ
- Eclipse OpenJ9
- Graal VM CE
- ХайкуВМ
- горячая точка
- Амига
- JamVM
- Jelatine JVM
- Jikes RVM (Виртуальная машина для исследований Jikes)
- Jikes RVM (Виртуальная машина для исследований Jikes)
- леЖОС
- Максин
- Движок с несколькими ОС
- RopeVM
- спм
6.2. Собственные Реализации
Существуют также реализации, защищенные авторским правом:
- Azul Zing JVM
- CEE-J
- Эксельсиор ДЖЕТ
- Грааль ВМ ЭЭ
- Imsys AB
- JamaicaVM (aicas)
- JBlend (Приложение)
- MicroJvm (IS2T – Промышленная интеллектуальная программная технология)
- СПМ
- PTC Чрескожно
- SAP JVM
- Waratek CloudVM для Java
Наряду с активными реализациями , перечисленными выше, мы можем увидеть список неактивных реализаций и краткое описание каждой реализации.
7. Заключение
В этой статье мы сосредоточились на двух самых популярных на сегодняшний день наборах для разработки Java.
Сначала мы описали каждый из них, а затем подчеркнули наиболее заметные различия между ними. Затем мы обратили особое внимание на изменения и различия, произошедшие с Java 11. Наконец, мы перечислили другие активные реализации, доступные сегодня.
Читайте также: