Історія версій Java
Мова програмування Java мала декілька змін починаючи з JDK 1.0, а також багато доповнень в класах та пакетах стандартної бібліотеки. Починаючи з J2SE розвитком Java управляють Java Community Proccess (JCP), які використовують Java Specification Requests (JSRs), щоб запропоновувати та вказувати доповнення та зміни у платформі Java. Мова визначається специфікацією JLS, змінами у JLS управляють JSR 901.
В доповнення до змін мови, найбільш драматичні зміни відбувалися у Java Class Library протягом багатьох років. Бібліотека виросла з декількох сотень класів в JDK 1.0 до більш ніж трьох тисяч в J2SE5. З'явилися нові API (Swing та Java 2D), крім цього, багато класів та методів з JDK 1.0 застаріли. Деякі програми дозволяють перетворення програм на Java з однієї версії до іншої (наприклад Java 5.0 портована до 1.4).
Після релізу Java 7, Oracle пообіцяли повернутись до дворічного циклу випуску. Тим не менше, у 2013 Oracle оголосили, що вони бажають відкласти випуск Java 8 на один рік для того, щоб виправити помилки, пов'язані з безпекою Java.
Реліз | Рік |
---|---|
JDK Beta | 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 | 2014 |
Java SE 9 | 2017 |
Java SE 10 | 2018 |
JDK Alpha and Beta
Перші альфа та бета-релізи Java у 1995 мали дуже нестабільні API та ABI. Браузер, що підтримував Java, мав назву WebRunner.
JDK 1.0
Перша версія була випущена 23 січня 1996 року і називалася "дуб". Перша стабільна версія JDK 1.0.2 називалася Java 1.
JDK 1.1
Основні доповнення в релізі 19 лютого 1997 року включали:
- масштабне переоснащення моделі подій AWT
- були додані внутрішні класи
- JavaBeans
- JDBC
- RMI
- рефлексія, що підтримувала тільки самоаналіз, зміни під час виконання програми не були можливими
- JIT (Just In Time) compiler на Microsoft Windows, розроблений для JavaSoft компанією Semantec.
- Інтернаціоналізація та підтримка Юнікоду
J2SE 1.2
Кодове ім'я - Playground. Реліз відбувся у грудні 1998 року. Назва версії "J2SE" (Java 2 Platform, Standard Edition) замінив JDK, щоб відрізнити базову платформу J2EE (Java 2 Platform, Enterprise Edition) і J2ME (Java 2 Platform, Micro Edition). Це був дуже важливий реліз Java, так як він втричі збільшив розмір платформи Java до 1520 класів в 59 пакетах. Головні доповнення включали:
J2SE 1.3
Кодове ім'я Kestrel. Найбільш помітними змінами в релізі 8 травня 2000 року були:
- включена HotSpot JVM (HotSpot JVM вперше була випущена в квітні 1999 для J2SE 1.2 JVM)
- RMI було змінено, щоб забезпечити підтримку сумісності CORBA
- Java Naming and Directory Interface (JNDI) було включено до основних бібліотек (раніше доступний як розширення)
- Java Platform Debugger Architecture (JPDA)
- JavaSound
- Синтетичні проксі-класи
J2SE 1.4
Кодове ім'я Merlin. Реліз 6 лютого 2002 року. Головні зміни включали:
- Зміни мови
assert
(вказане в JSR 41)
- Покращення бібліотеки
- Регулярні вирази за зразком регулярних виразів Perl
- Замикання виключень дозволяє виключенням інкапсулювати інші виключення
- Підтримка протоколу IPv6
- Неблокуюче IO (названо New Input/Output, NIO) (вказано в JSR 51)
- API для журналювання (вказано в JSR 47)
- I/O API для зчитування та записку картинок в таких форматах як JPEG та PNG
- Інтегрований XML парсер та XSLTпроцесор(JAXP) (вказано в JSR 5 та JSR 63)
- Інтегровані розширення для безпеки та криптографії (JCE, JSSE, JAAS)
- Java Web Start (вказано в JSR 56)
- Preferences API (
java.util.prefs
)
J2SE 5.0
Кодове ім'я Tiger. Реліз 30 вересня 2004 року був також пронумерований як 1.5. Ця версія була розроблена під JSR 176.
Було додано значну кількість нових можливостей:
- Generics: забезпечують безпеку типів для колекцій та усувають необхідність приведення типів (вказано в JSR 14)
- Метадані: також називаються анотації, дозволяють додавати додаткову інформацію для класів, методів і т.д.
- Autoboxing/unboxing: автоматичне приведення примітивних типів до їх обгорток(вказано в JSR 201)
- Enumerations: впорядкований лист значень
- Varargs: останній параметр може бути оголошений, використовуючи три точки (наприклад
void drawtext(String... lines)
). За допомогою цього метод може приймати будь-яку кількість параметрів. - Цикл
for each
: зроблений для перебору елементів колекцій, що реалізовують інтерфейс Iterable (specified by JSR 201) - Покращена багатонитевість
- Статичні імпорти
Також були покращення у основній бібліотеці:
- Автоматична генерація заглушки для об'єктів RMI
- Оновлено Swing
- Інструменти для паралельного виконання програм в
java.util.concurrent
- Клас Scanner для зчитування даних з різних потоків та буферів
Java SE 6
Кодове ім'я Mustang. Випущена 11 грудня 2006 року. Ця версія була розроблена під JSR 270.
Головні зміни включали:
- Підтримка скриптів(JSR 223): API для інтеграції зі скриптовими мова програмування та вбудована інтеграція Mozilla JavaScript Rhino.
- Покращення основної платформи та Swing.
- Покращена підтримка веб-сервісів через JAX-WS (JSR 224).
- JDBC 4.0 (JSR 221).
- Java Compiler API (JSR 199): an API. що дозволяє програмі вибирати та викликати компілятор програмно.
- Покращення JAXB до версії 2.0.
- Підтримка вбудованих анотацій(JSR 269).
- Покращення графічного інтерфейсу.
- Покращення JVM: синхронізація та оптимізація компілятора
Java SE 7
Java 7 (кодове ім'я Dolphin) стала доступною для розробників 28 липня 2011 року.
Доповнення в Java 7 включали:
- Підтримка JVM для динамічних мов
- Стиснуті 64-бітні вказівники
- Зміни згруповані під ім'я Coin:
- Strings у switch
- Автоматичне управління ресурсами в try
- З'явився оператор <>
- Спрощено оголошення методів зі змінною кількістю аргументів.
- Бінарні цілі літерали
- Нижнє підкреслення у числових літералах
- Catching multiple exception types and rethrowing exceptions with improved type checking
- Інструменти для паралельного програмування під JSR 166[
- Нова файлова I/O бібліотека, що підтримує різні файлові системи, метадані файлу та символічні посилання. З'явилися нові пакети:
java.nio.file
,java.nio.file.attribute
andjava.nio.file.spi
- Timsort, що використовується, щоб відсортувати колекції та масиви об'єктів замість merge sort
- XRender для Java 2D
- Нові API для графіки
- Підтримка нових мережевих протоколів, включаючи SCTP та Sockets Direct Protocol
- Upstream оновлення до XML та Unicode
- Набір правил для розгортання
Java SE 8
Java 8 була випущена 18 березня 2014 року[1].
На думку розробників мови програмування Java, 8-ма версія стала найбільшим кроком її еволюції. Порівняно невелика кількість нових засобів — лямбда вирази, посилання на методи та функційні інтерфейси разом перетворили Java на багатопарадигмову мову програмування: на додачу до об'єктно-орієнтованого з'явилися елементи функційного програмування. Разом з мовою еволюції зазнали й супутні програмні бібліотеки[2]. Так, наприклад, в API для колекцій додано підтримку Stream API, завдяки чому можуть відбуватися масові операції над колекціями[3].
Ця версія включає:[4]
- JSR 308: анотації для типів даних. Анотації можна виконати у всіх випадках використання змінних цього типу. Таким чином поліпшено перевірку правильності коду.
- JSR 310: API для часу та дат
- JSR 335: лямбда вирази та методи за замовченням (англ. default methods). Методи за замовченням дозволяють зберегти бінарну сумісність зі старим кодом при додаванні нових можливостей до інтерфейсів програмних бібліотек[3]
- Посилання на методи: разом з лямбда виразами спрощують написання лямбда виразів[3]
- Роботу з беззнаковими цілими числами (32- та 64- бітні java.lang.Integer та Long відповідно)[5]
Змін також зазнали
- JSR 003: Java Management Extensions
- JSR 114: JDBC Rowsets
- JSR 160: JMX Remote API
- JSR 173: Потокове API для XML (SAX)
- JSR 199: Java Compiler API
- JSR 206: Java API для обробки XML документів
- JSR 221: JDBC 4.0
- JSR 269: Pluggable Annotation-Processing API
- Був замінений рушій для виконання скриптів JavaScript, замість Rhino обраний Nashorn[3]
У версії не було реалізовано модульність платформи Java, проте було вжито деяких заходів для полегшення її реалізації у наступних релізах[4]. Так, з'явилися «компактні профілі» (англ. Compact Profiles), які дозволяють реалізувати роботу програм на неповних реалізаціях платформи Java[3].
Java SE 9
На JavaOne 2011 Oracle обговорювали функції, які вони збираються додати до Java 9, серед яких були: покращення підтримки багатогігабайтних куп, краща інтеграція машинного коду та JVM, що може сама себе налаштовувати. На початку 2016 реліз було перенесено на березень 2017.
- JSR 294: Модульна організація JDK під проектом Jigsaw (Java Module System)
- JSR 354: API для грошей та валюти
- JEP 222: jshell(Java REPL)
- Модуляризація
Були також плани додати автоматичне розпаралелювання, використовуючи OpenCL та реактивні потоки.
Java SE 10
OpenJDK 10 був випущений 20 березня 2018 року, в новий випуск увійшло 12 нововведень[6]. Серед іншого:
- JEP 286: виведення типів для локальних змінних[7]
- JEP 317: експериментальний JIT компілятор на Java[8]
- JEP 310: можливість спільного використання класів різними додатками для Java[9]
Цей реліз став релізом з новими функціями (англ. feature release) та прийшов на заміну релізу 9. Наступний реліз з тривалою підтримкою (англ. long-term support, LTS) матиме номер 11 та очікується у вересні 2018 року[10].
Відтепер компанія планує випускати LTS реліз раз на три роки, демонстрації нових функцій (англ. feature release) кожні шість місяців, а оновлення — щокварталу. Після релізу Java 11 у вересні 2018 року наступним LTS релізом стане Java 17, випуск якої заплановано на вересень 2021 року[10].
Примітки
- JDK 8 Schedule
- James Gosling, Bill Joy, Guy Steele, Gilad Bracha, Alex Buckley (13 лютого 2015). Preface to the Java SE 8 Edition. The Java® Language Specification. Java SE 8 Edition. Oracle America, Inc.
- What's New in JDK 8. Oracle. Процитовано 3 березня 2017.
- Mark Reinhold (2013/11/4). JSR 337: Java SE 8. Public Review Specification. Oracle and/or its affiliates.
- Darcy (Jan 20, 2012). Unsigned Integer Arithmetic API now in JDK 8. Oracle.
- OpenJDK. JDK 10.
- JEP 286: Local-Variable Type Inference. OpenJDK.
- JEP 317: Experimental Java-Based JIT Compiler. OpenJDK.
- JEP 310: Application Class-Data Sharing. OpenJDK.
- John K. Waters (21 березня 2018). Java 10 Released, First in the New Faster Cadence. ADT Mag.