SlideShare une entreprise Scribd logo
1  sur  33
Java 9: Platform
Jigsaw: цели
Простота
Безопасность
Эффективность
Jigsaw: решение
Модули
Анатомия модуля
Fun.java
meetups.properties
module jprof {
requires space;
exports knowledge;
provides Meetups with
Fun;
}
Jigsaw: JEPs
● JEP 200: The Modular JDK
● JEP 260: Encapsulate Most Internal APIs
● JEP 261: Module System
● JEP 220: Modular Run-Time Images
● JEP 282: jlink: The Java Linker
JEP 200: The Modular JDK
http://cr.openjdk.java.net/~mr/jigsaw/jdk9-module-summary.html
JEP 260: Encapsulate Most Internal APIs
● Публичные
○ java.*
○ javax.*
○ com.sun.*
● Внутренние
○ sun.*
JEP 260: Encapsulate Most Internal APIs
Внутренние API:
● Некритичные
(sun.misc.BASE64Decoder → j.u.Base64)
● Критичные (sun.misc.Unsafe)
JEP 260: Encapsulate Most Internal APIs
● Неиспользуемые: инкапсулированы
● С заменой: инкапсулированы
● Остальные:
○ Помечены @Deprecated
○ Будут инкапсулированы или удалены
○ Доступны для использования через
disruptor-3.3.7.jar -> jdk.unsupported
c.l.d.MultiProducerSequencer -> sun.misc.Unsafe (jdk.unsupported)
c.l.d.RingBufferFields -> sun.misc.Unsafe (jdk.unsupported)
c.l.d.Sequence -> sun.misc.Unsafe (jdk.unsupported)
c.l.d.util.Util -> sun.misc.Unsafe (jdk.unsupported)
c.l.d.util.Util$1 -> sun.misc.Unsafe (jdk.unsupported)
JDK Internal API Suggested Replacement
---------------- ---------------------
sun.misc.Unsafe See http://openjdk.java.net/jeps/260
jdeps: check yourself before you wreck yourself
Unnamed & Automatic modules
Экспортируют всё
Имеют доступ ко всему
Classpath is (not) gone
--module-path --classpath
Plain old JAR Automatic module Unnamed module
Module JAR “True” module Unnamed module
jdk.unsupported
module yaoming {
requires jdk.unsupported;
}
VarHandle
Unsafe#getInt(Object, long)
Unsafe#putInt(Object, long, int)
Unsafe#compareAndSwapInt(Object, long,
int, int)
VarHandle#get(Object…)
VarHandle#put(Object…)
VarHandle#compareAndSet(Object…)
JEP 261: Module System
● --module-path и co.
● Новые поля в *.class-файлах
● Modular JAR files
● JMOD
JEP 220: Modular Run-Time Images
├── bin
│ ├── app
│ ├── java
│ └── keytool
├── conf
│ └── *.properties
├── legal
├── lib
│ ├── …
│ ├── modules
│ └── *.so
└── release
JEP 282: jlink: The Java Linker
Modules
Module runtime image
bin jmods …libs
jlink
Jigsaw: выгода
jlink
JEP 238: Multi-Release JAR Files
├── A.class
├── B.class
├── C.class
├── D.class
└── META-INF
├── MANIFEST.MF // Multi-Release: true
└── versions
├── 9
│ ├── A.class
│ └── B.class
└── 10
└── A.class
http://openjdk.java.net/jeps/238
String enhancements
● JEP 250: Store Interned Strings in CDS Archives
● JEP 254: Compact Strings
● JEP 280: Indify String Concatenation
JEP 226: UTF-8 Property Resource Bundles
java.util.ResourceBundle != java.util.Properties
http://openjdk.java.net/jeps/226
JEP 267: Unicode 8.0
http://openjdk.java.net/jeps/267
JEP 223: New Version-String Scheme
http://openjdk.java.net/jeps/223
JEP 223: New Version-String Scheme
Что безопаснее: JDK 8u60, или JDK 8u51?
JEP 223: New Version-String Scheme
Сколько релизов между 8u51 и 8u60?
JEP 223: New Version-String Scheme
$MAJOR.$MINOR.$SECURITY
1.9.0.0 -> 9.0.0
JEP 223: New Version-String Scheme
8u51 -> 8.2.6
8u60 -> 8.3.6
8u65 -> 8.3.7
8u71 -> 8.3.8
JEP 248: Make G1 the Default Garbage Collector
http://openjdk.java.net/jeps/248
Уменьшение пауз
Иной memory layout
Recap
● Jigsaw, модули
● jlink
● Multi-release JARs
● String enhancements
● UTF-8 ResourceBundles
● Unicode 8.0
Q&A

Contenu connexe

Tendances

Мастер класс- Maven + Jenkins
Мастер класс- Maven + JenkinsМастер класс- Maven + Jenkins
Мастер класс- Maven + JenkinsValentin Fedoskin
 
Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Ontico
 
Инфраструктура распределенных приложений на Node.js
Инфраструктура распределенных приложений на Node.jsИнфраструктура распределенных приложений на Node.js
Инфраструктура распределенных приложений на Node.jsStanislav Gumeniuk
 
"Посмотрим на Акку-Джаву" Дмитрий Мантула
"Посмотрим на Акку-Джаву" Дмитрий Мантула"Посмотрим на Акку-Джаву" Дмитрий Мантула
"Посмотрим на Акку-Джаву" Дмитрий МантулаFwdays
 
JavaScript завтра
JavaScript завтраJavaScript завтра
JavaScript завтраSergey Rubanov
 
Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"
Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"
Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"Fwdays
 
Архитектура Apache Ignite .NET
Архитектура Apache Ignite .NETАрхитектура Apache Ignite .NET
Архитектура Apache Ignite .NETMikhail Shcherbakov
 
антон веснин Rails Application Servers
антон веснин Rails Application Serversантон веснин Rails Application Servers
антон веснин Rails Application Serversrit2010
 
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ciАлександр Сигачев
 
Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»WrikeTechClub
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаendeveit
 
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаITCrowd Almaty
 
Опыт внедрения Docker .
 Опыт внедрения Docker .  Опыт внедрения Docker .
Опыт внедрения Docker . phpfriendsclub
 
Олег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоОлег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоCodeFest
 
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"IT Event
 
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"IT Event
 
Moscow js 26 webpack
Moscow js 26   webpackMoscow js 26   webpack
Moscow js 26 webpacklgordey
 

Tendances (20)

Мастер класс- Maven + Jenkins
Мастер класс- Maven + JenkinsМастер класс- Maven + Jenkins
Мастер класс- Maven + Jenkins
 
Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)
 
Инфраструктура распределенных приложений на Node.js
Инфраструктура распределенных приложений на Node.jsИнфраструктура распределенных приложений на Node.js
Инфраструктура распределенных приложений на Node.js
 
"Посмотрим на Акку-Джаву" Дмитрий Мантула
"Посмотрим на Акку-Джаву" Дмитрий Мантула"Посмотрим на Акку-Джаву" Дмитрий Мантула
"Посмотрим на Акку-Джаву" Дмитрий Мантула
 
Vagrant puppet
Vagrant puppetVagrant puppet
Vagrant puppet
 
JavaScript завтра
JavaScript завтраJavaScript завтра
JavaScript завтра
 
Node.js (RichClient)
 Node.js (RichClient) Node.js (RichClient)
Node.js (RichClient)
 
Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"
Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"
Dmytro Nemesh "Building the perfect infrastructure with Kubernetes"
 
Use Grunt Luke
Use Grunt LukeUse Grunt Luke
Use Grunt Luke
 
Архитектура Apache Ignite .NET
Архитектура Apache Ignite .NETАрхитектура Apache Ignite .NET
Архитектура Apache Ignite .NET
 
антон веснин Rails Application Servers
антон веснин Rails Application Serversантон веснин Rails Application Servers
антон веснин Rails Application Servers
 
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ci
 
Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервиса
 
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
 
Опыт внедрения Docker .
 Опыт внедрения Docker .  Опыт внедрения Docker .
Опыт внедрения Docker .
 
Олег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоОлег Бартунов и Иван Панченко
Олег Бартунов и Иван Панченко
 
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
 
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
Illya Klymov - "Vue.JS: What did I swap React for in 2017 and why?"
 
Moscow js 26 webpack
Moscow js 26   webpackMoscow js 26   webpack
Moscow js 26 webpack
 

Similaire à Java 9: Platform

Java 9 модули
Java 9 модулиJava 9 модули
Java 9 модулиZheka Kozlov
 
Разговор про Java 9. Extended version
Разговор про Java 9. Extended versionРазговор про Java 9. Extended version
Разговор про Java 9. Extended versionIvan Krylov
 
What to expect from Java 9
What to expect from Java 9What to expect from Java 9
What to expect from Java 9JavaDayUA
 
Разработка приложений для Android на С++. Юрий Береза, Shturmann
Разработка приложений для Android на С++. Юрий Береза, ShturmannРазработка приложений для Android на С++. Юрий Береза, Shturmann
Разработка приложений для Android на С++. Юрий Береза, Shturmannyaevents
 
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON
 
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17MoscowJS
 
Drupal code sprint для новичков
Drupal code sprint для новичковDrupal code sprint для новичков
Drupal code sprint для новичковOvadiah Myrgorod
 
JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"oelifantiev
 
Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...
Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...
Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...Nikita Lipsky
 
Доклады с прошедшей JiraMania: про обновления, зависимости и дедлоки
Доклады с прошедшей JiraMania: про обновления, зависимости и дедлокиДоклады с прошедшей JiraMania: про обновления, зависимости и дедлоки
Доклады с прошедшей JiraMania: про обновления, зависимости и дедлокиGonchik Tsymzhitov
 
Дмитрий Юницкий. «Android NDK или как я перестал бояться и полюбил нативную р...
Дмитрий Юницкий. «Android NDK или как я перестал бояться и полюбил нативную р...Дмитрий Юницкий. «Android NDK или как я перестал бояться и полюбил нативную р...
Дмитрий Юницкий. «Android NDK или как я перестал бояться и полюбил нативную р...Mail.ru Group
 
Модули в Java
Модули в JavaМодули в Java
Модули в JavaZheka Kozlov
 
Методы защиты Java-приложений и их обход
Методы защиты Java-приложений и их обходМетоды защиты Java-приложений и их обход
Методы защиты Java-приложений и их обходPositive Hack Days
 
Разработка SPA на мультисайтовом highload-проекте
Разработка SPA на мультисайтовом highload-проектеРазработка SPA на мультисайтовом highload-проекте
Разработка SPA на мультисайтовом highload-проектеAndrew Gumenniy
 
JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом highload-проекте"
JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом highload-проекте"JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом highload-проекте"
JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом highload-проекте"GeeksLab Odessa
 
Unsafe: to be or to be removed?
Unsafe: to be or to be removed?Unsafe: to be or to be removed?
Unsafe: to be or to be removed?Alexey Fyodorov
 
Modern neural net architectures - Year 2019 version
Modern neural net architectures - Year 2019 versionModern neural net architectures - Year 2019 version
Modern neural net architectures - Year 2019 versionGrigory Sapunov
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Ontico
 
Webpack для самых маленьких | Odessa Frontend Meetup #5
Webpack для самых маленьких | Odessa Frontend Meetup #5Webpack для самых маленьких | Odessa Frontend Meetup #5
Webpack для самых маленьких | Odessa Frontend Meetup #5OdessaFrontend
 

Similaire à Java 9: Platform (20)

Java 9 модули
Java 9 модулиJava 9 модули
Java 9 модули
 
Разговор про Java 9. Extended version
Разговор про Java 9. Extended versionРазговор про Java 9. Extended version
Разговор про Java 9. Extended version
 
What to expect from Java 9
What to expect from Java 9What to expect from Java 9
What to expect from Java 9
 
Разработка приложений для Android на С++. Юрий Береза, Shturmann
Разработка приложений для Android на С++. Юрий Береза, ShturmannРазработка приложений для Android на С++. Юрий Береза, Shturmann
Разработка приложений для Android на С++. Юрий Береза, Shturmann
 
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли UnitySECON'2016. Чубарь Алексей, Мобильные грабли Unity
SECON'2016. Чубарь Алексей, Мобильные грабли Unity
 
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
 
Drupal code sprint для новичков
Drupal code sprint для новичковDrupal code sprint для новичков
Drupal code sprint для новичков
 
JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"
 
Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...
Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...
Java худеет. Спроси меня как. Уменьшение размера дистрибутива Java приложения...
 
Доклады с прошедшей JiraMania: про обновления, зависимости и дедлоки
Доклады с прошедшей JiraMania: про обновления, зависимости и дедлокиДоклады с прошедшей JiraMania: про обновления, зависимости и дедлоки
Доклады с прошедшей JiraMania: про обновления, зависимости и дедлоки
 
Дмитрий Юницкий. «Android NDK или как я перестал бояться и полюбил нативную р...
Дмитрий Юницкий. «Android NDK или как я перестал бояться и полюбил нативную р...Дмитрий Юницкий. «Android NDK или как я перестал бояться и полюбил нативную р...
Дмитрий Юницкий. «Android NDK или как я перестал бояться и полюбил нативную р...
 
Модули в Java
Модули в JavaМодули в Java
Модули в Java
 
Методы защиты Java-приложений и их обход
Методы защиты Java-приложений и их обходМетоды защиты Java-приложений и их обход
Методы защиты Java-приложений и их обход
 
Разработка SPA на мультисайтовом highload-проекте
Разработка SPA на мультисайтовом highload-проектеРазработка SPA на мультисайтовом highload-проекте
Разработка SPA на мультисайтовом highload-проекте
 
JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом highload-проекте"
JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом highload-проекте"JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом highload-проекте"
JSLab. Григорий Перетяка "Разработка SPA на мультисайтовом highload-проекте"
 
Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...Jenkins в docker in mesos in ...
Jenkins в docker in mesos in ...
 
Unsafe: to be or to be removed?
Unsafe: to be or to be removed?Unsafe: to be or to be removed?
Unsafe: to be or to be removed?
 
Modern neural net architectures - Year 2019 version
Modern neural net architectures - Year 2019 versionModern neural net architectures - Year 2019 version
Modern neural net architectures - Year 2019 version
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
 
Webpack для самых маленьких | Odessa Frontend Meetup #5
Webpack для самых маленьких | Odessa Frontend Meetup #5Webpack для самых маленьких | Odessa Frontend Meetup #5
Webpack для самых маленьких | Odessa Frontend Meetup #5
 

Java 9: Platform

  • 2.
  • 5. Анатомия модуля Fun.java meetups.properties module jprof { requires space; exports knowledge; provides Meetups with Fun; }
  • 6. Jigsaw: JEPs ● JEP 200: The Modular JDK ● JEP 260: Encapsulate Most Internal APIs ● JEP 261: Module System ● JEP 220: Modular Run-Time Images ● JEP 282: jlink: The Java Linker
  • 7. JEP 200: The Modular JDK http://cr.openjdk.java.net/~mr/jigsaw/jdk9-module-summary.html
  • 8. JEP 260: Encapsulate Most Internal APIs ● Публичные ○ java.* ○ javax.* ○ com.sun.* ● Внутренние ○ sun.*
  • 9. JEP 260: Encapsulate Most Internal APIs Внутренние API: ● Некритичные (sun.misc.BASE64Decoder → j.u.Base64) ● Критичные (sun.misc.Unsafe)
  • 10. JEP 260: Encapsulate Most Internal APIs ● Неиспользуемые: инкапсулированы ● С заменой: инкапсулированы ● Остальные: ○ Помечены @Deprecated ○ Будут инкапсулированы или удалены ○ Доступны для использования через
  • 11. disruptor-3.3.7.jar -> jdk.unsupported c.l.d.MultiProducerSequencer -> sun.misc.Unsafe (jdk.unsupported) c.l.d.RingBufferFields -> sun.misc.Unsafe (jdk.unsupported) c.l.d.Sequence -> sun.misc.Unsafe (jdk.unsupported) c.l.d.util.Util -> sun.misc.Unsafe (jdk.unsupported) c.l.d.util.Util$1 -> sun.misc.Unsafe (jdk.unsupported) JDK Internal API Suggested Replacement ---------------- --------------------- sun.misc.Unsafe See http://openjdk.java.net/jeps/260 jdeps: check yourself before you wreck yourself
  • 12. Unnamed & Automatic modules Экспортируют всё Имеют доступ ко всему
  • 13. Classpath is (not) gone --module-path --classpath Plain old JAR Automatic module Unnamed module Module JAR “True” module Unnamed module
  • 15. VarHandle Unsafe#getInt(Object, long) Unsafe#putInt(Object, long, int) Unsafe#compareAndSwapInt(Object, long, int, int) VarHandle#get(Object…) VarHandle#put(Object…) VarHandle#compareAndSet(Object…)
  • 16.
  • 17. JEP 261: Module System ● --module-path и co. ● Новые поля в *.class-файлах ● Modular JAR files ● JMOD
  • 18. JEP 220: Modular Run-Time Images ├── bin │ ├── app │ ├── java │ └── keytool ├── conf │ └── *.properties ├── legal ├── lib │ ├── … │ ├── modules │ └── *.so └── release
  • 19. JEP 282: jlink: The Java Linker Modules Module runtime image bin jmods …libs jlink
  • 20.
  • 22. JEP 238: Multi-Release JAR Files ├── A.class ├── B.class ├── C.class ├── D.class └── META-INF ├── MANIFEST.MF // Multi-Release: true └── versions ├── 9 │ ├── A.class │ └── B.class └── 10 └── A.class http://openjdk.java.net/jeps/238
  • 23. String enhancements ● JEP 250: Store Interned Strings in CDS Archives ● JEP 254: Compact Strings ● JEP 280: Indify String Concatenation
  • 24. JEP 226: UTF-8 Property Resource Bundles java.util.ResourceBundle != java.util.Properties http://openjdk.java.net/jeps/226
  • 25. JEP 267: Unicode 8.0 http://openjdk.java.net/jeps/267
  • 26. JEP 223: New Version-String Scheme http://openjdk.java.net/jeps/223
  • 27. JEP 223: New Version-String Scheme Что безопаснее: JDK 8u60, или JDK 8u51?
  • 28. JEP 223: New Version-String Scheme Сколько релизов между 8u51 и 8u60?
  • 29. JEP 223: New Version-String Scheme $MAJOR.$MINOR.$SECURITY 1.9.0.0 -> 9.0.0
  • 30. JEP 223: New Version-String Scheme 8u51 -> 8.2.6 8u60 -> 8.3.6 8u65 -> 8.3.7 8u71 -> 8.3.8
  • 31. JEP 248: Make G1 the Default Garbage Collector http://openjdk.java.net/jeps/248 Уменьшение пауз Иной memory layout
  • 32. Recap ● Jigsaw, модули ● jlink ● Multi-release JARs ● String enhancements ● UTF-8 ResourceBundles ● Unicode 8.0
  • 33. Q&A

Notes de l'éditeur

  1. Похоже, остались самые стойкие. Для вас мы приберегли кишочки.
  2. Вот такую рекламу Java 9 заказал Oracle у Lionsgate.
  3. Начнём издалека. Что же такое проект Jigsaw, зачем он вообще нужен? Упростить разработку и поддержку библиотек и крупных приложений Повысить безопасность платформы Java SE в целом и JDK в частности Улучшить производительность Снизить потребление ресурсов для использования в IoT / cloud
  4. Как же будут достигаться поставленные цели? Дизайн и разработка модульной системы для платформы (Java SE), применение её к референсной имплементации (JDK 9). Модульная система позволяет раздробить саму JDK, а также проста в использовании разработчиками. Модули - это всего лишь способ группировки пакетов (классов), нативного кода, ресурсов и конфигураций. Модули не затрагивают проблему версионирования.
  5. Модуль - это специальным образом собранный JAR-файл, содержащий классы в пакетах, ресурсы, конфигурацию и специальный дескриптор module-info.java. В дескрипторе указываются: Модули, от которых зависит данный модуль Экспортируемые пакеты Провайдеры сервисов, ака SPI.
  6. Jigsaw состоит из нескольких enhancement proposals. Для разработчиков, ИМХО, наиболее важными станут 260, 261, 282.
  7. Отныне, вся JDK разбита на небольшие, логически сгруппированные модули. Но не беспокойтесь, IDEA уже понимает это. JEP 201 нам не интересен: он больше предназначен для разработчиков JDK и описывает изменения в структуре её исходного кода.
  8. О том, как использовать модули в своих приложениях мы поговорить чуть позже, а сейчас давайте ознакомимся с предлагаемой классификацией существующих Java API.
  9. … внимательнее посмотрим на внутренние API… Они бывают: Некритичные: неиспользуемые за пределами JDK или те, для которых существует замена Критичные: сложно или практически невозможно реализовать вне JDK
  10. Как видим, ничего по-настоящему страшного пока не произошло. Даже для sun.misc.Unsafe нашлась замена (ну почти, об этом дальше).
  11. Нет, не работаем. Если вы полагаете, что раз в вашем коде не встречается “importsun.misc.Unsafe;”,то вам не о чем волноваться, вы ошибаетесь. Вот результат анализа последней версии довольно популярной библиотеки LMAX Disruptor утилитой jdeps. Проверьте ваши проекты заранее!
  12. Oracle заботится о разработчиках! При попытке загрузки классов из пакетов, не входящих ни в один модуль, поиск продолжиться в classpath и, в случае успеха, найденные классы / пакеты попадут в unnamed module, экспортирующий все свои пакеты и читающий все остальные модули! Любой JAR, помещённый в modulepath, даже если это не Java 9 модуль, автоматически превращается в модуль, экспортирующий все свои пакеты и читающий все остальные модули!
  13. Таблица показывает, что бывает с разными типами файлов при помещении в те или иные пути…
  14. План действий на ближайшие пару лет.
  15. Некоторым из методов Unsafe нашлась замена.
  16. Отлично, работаем дальше!
  17. В общем: инфраструктура для работы с модулями. Самое интересное тут - новый формат файлов: JMOD. Это блоб, ZIP, позволяющий хранить, среди прочего, нативный код и другие вещи, не совсем подходящие для JAR-файлов. Все модули JDK упакованы в JMOD, но он не обязателен к использованию.
  18. Изменилась и структура директорий JDK. Нет больше папки jre, нет rt.jar и tools.jar.
  19. jlink, по сути, собирает вашу собственную (уникальную и неповторимую) JVM лишь с необходимыми вам модулями, а также, опционально, создаёт нативный исполняемый файл для вызова ваших Main-классов! И это меняет правила игры!
  20. Демо Jigsaw modules + jlink
  21. Кто знает, что такое OSGi? Провели параллели, да? Мне навсегда запомнилась фраза моего тимлида, когда я впервые увидел OSGi (не думаю, что он автор): если ты не знаешь, что такое OSGi, то он тебе не нужен. Модули похожи на OSGi не только концептуально, но и повторяют, ИМХО, его историю: Не-упрощение разработки для простых смертных. Т.е. как минимум, легче разрабатывать станет. Может - сложнее. Первоначальное отсутствие хорошего инструментария “Частичный” переход библиотек. Для тех, кто не в курсе: большАя часть библиотек в Maven Central до сих пор не имеют OSGi-манифестов, что вызывает некоторые неудобства при желании их использовать в OSGi-окружениях. В целом, модули имеют больше значения для разработчиков JDK, крупных библиотек и приложений (аппликейшн серверов). Но и обычный разработчик может столкнутся с ситуациями, где они просто необходимы: jlink.
  22. JAR с версиями классов для разных JVM. Здесь бы хотел немного отойти от темы доклада и погоревать об Oracle, его заботе о разработчиках и инструментах. А именно: как собирать мульти-релизные JAR-файлы кроме как не через утилиты из JDK? Где поддержка со стороны Gradle / Maven. Сюда же работа с jlink, модулями вообще. Поддержки пока нет!
  23. JEP 250: Store Interned Strings in CDS Archives CDS (Class Data Sharing) архив — это специальный файл, создаваемый JDK, содержащий какой-то набор классов, используемых JVM во внутреннем представлении. Внутреннее представление - это не .class файлы, а просто дамп областей памяти работающей JVM с теми классами. CDS архив переиспользуется несколькими JVM, запущенными одновременно, через memory mapping. Как несложно понять из этого упрощенного описания CDS архив немного улучшает время запуска новых JVM (оно не тратится на преобразование .class формата во внутренние структуры). Также в этом файле хранятся и некоторые строковые константы, но, почему-то в UTF-8. Во время использования этих строк, они преобразуются в String, на что тратится время и дополнительная память. К тому же, такие строки не интернированы, т.е. Существуют в нескольких инстансах. Предлагается использовать char[] напрямую. JEP 254: Compact Strings До Java 9 содержимое строк хранилось в char[], подразумевая кодировку UTF-16 (два байта на любой символ). Анализ исходного кода многих приложений, проведённый разработчиками JDK, показал, что большинство строк на самом деле используют символы из Latin-1 набора, для представления которых достаточно одного байта. Предлагается изменить внутреннее представлние класса String: хранить содержимое либо в byte[] (если все символы укладываются в Latin-1) либо в char[] (в противном случае) + флаг. JEP 280: Indify String Concatenation Многие знают, что конкатенация строк в коде преобразуется в вызовы StringBuilder::append в байткоде. Это, в принципе, неплохой подход, но он не позволяет делать некоторые оптимизации (например пре-выделение места в StringBuilder без изменения байткода / использования дополнительных флагов). Предлагается изменить байткод конкатенации строк на динамический вызов (invokedynamic) java.lang.invoke.StringConcatFactory. Это позволит иметь всегда одинаковый байткод конкатенации, а оптимизации будут проводится непосредственно в StringConcatFactory. invokedynamic, если помните “запоминает” аргументы вызова метода и связывает их с той или иной имплементацией байт-кода при первом вызове. Так разработчикам JDK будет проще выкатывать новые оптимизации, которые будут доступны без перекомпиляции кода, просто при запуске на новых версиях JVM. Как видите, эти изменения не имеют прямого влияния на простых разработчиков, типа нас с вами, но строки в Java 9 стали ещё лучше!
  24. Обращаю ваше внимание, что UTF-8 доступна для использования в *.properties-файлах лишь при загрузке их через класс java.util.ResourceBundle, а не java.util.Properties. При загрузке UTF-8 файлов через класс Properties вы получите кракозябры, так как он по-прежнему использует Latin-1.
  25. ~8000 символов в 10-ти блоках для 6-ти систем письма и не только! А это означает поддержку: Скин-тонов для некоторых эмодзи Символ лари (грузинская валюта) 5771 символ CJK (усилие по выделению общего подмножества из иероглифов китайских, японских и корейских систем письма) Строчного письма чероки Письменностей ахом, древнеанатолийского языка, венгерских рун, мёртвых диалектов арамейских языков, одного из современных диалектов пенджабского и жестового письма И нет, я не выдумал эти языки. Они реально существуют или существовали.
  26. Давайте взбодримся и ответим на парочку несложных вопросов.
  27. Похоже, что 60, ведь это целых 9 релизов после 51?! Неверно! В 60-м релизе есть лишь несколько минорных изменений, а в целом они одинаковы. Правильный ответ, кстати: Java 9!
  28. Ни одного! 8u60 выпустили сразу после 8u51. Релизов 52, 53 и 57 не существует. Почему? Версии Java делящиеся нацело на 20 не содержат секьюрити фиксов! А версии, содержащие секьюрити фиксы должны быть нечётными, с шагом в 5 или 6 (чтобы обеспечивать нечётность)! Таким образом, после 51-го релиза с секьюрити фиксами следующим мог бы стать 57-й или 60-й, время выдалось спокойное и дыр не находили: выпустили 8u60. Следующим мог бы стать 8u65 (очевидно безопаснее 8u60 и 8u51) или 8u80 (равный по безопасности). Или нет?
  29. Всё это безумие заменили на что-то, похожее на Semver. По-прежнему сохранились билды, патчи, релиз-кандидаты и early access, но в целом - так. И, да, если вы где-то полагались на единичку в версиях - будьте осторожны, её убрали. Совсем.
  30. А так могли бы выглядеть версии Java 8. MINOR и SECURITY тут не совсем случайны, но могу быть неверными: я посчитал сколько каких релизов было в Java 8 и прикинул на пальцах. Немного нагляднее, верно?
  31. Уменьшение пауз в угоду пропускной способности. Что это значит для нас, простых смертных? Ну, во-первых, ребята из JDK решили что так нам будет лучше. Во-вторых, если вы всё ещё спрашиваете / отвечаете про GC / memory layout на собесах - обновите собственные знания.