What to expect from Java 9

195
Чего ждать от Java 9? Иван Крылов 1

Transcript of What to expect from Java 9

Page 1: What to expect from Java 9

Чего ждать от Java 9?

Иван Крылов

1

Page 2: What to expect from Java 9

Зачем этот доклад?

2

Page 3: What to expect from Java 9

Зачем этот доклад?

• До выхода JDK9 меньше года

• Знать об изменениях лучше заранее

2

Page 4: What to expect from Java 9

Зачем этот доклад?

• До выхода JDK9 меньше года

• Знать об изменениях лучше заранее

• Я работаю в Azul Systems - производителе JDK

• Я - сторонний заинтересованный наблюдатель развития платформы

• Вся информация из публичных источников

2

Page 5: What to expect from Java 9

Переход на новую версию Java

3

Page 6: What to expect from Java 9

Переход на новую версию Java

New features!Новые возможности!3

Page 7: What to expect from Java 9

Переход на новую версию Java

New features!Новые возможности! New incompatibilities!Источник ошибок и несовместимостей3

Page 8: What to expect from Java 9

Переход на новую версию Java

Изображения - Ihttps://vijaybelola.wordpress.com/2011/09/20/let-the-games-begin/ ; https://ru.wikipedia.org/wiki/FacepalmNew features!Новые возможности! New incompatibilities!Источник ошибок и несовместимостей

3

Page 9: What to expect from Java 9

Временные интервалы выхода версий Java

4

Page 10: What to expect from Java 9

Временные интервалы выхода версий Java

JDK 6Дек 2006

JDK 7Июль 2011

JDK 8Мар 2014

JDK 9план. Сент 2016

4

GA

Page 11: What to expect from Java 9

Временные интервалы выхода версий Java

JDK 6Дек 2006

JDK 7Июль 2011

JDK 8Мар 2014

JDK 9план. Сент 2016

JDK 6Ноя 2012

JDK 7Апр 2015

JDK 8план. Сент 2017

J2SE 1.4 Дек 2006

JDK 5Окт 2009

4

GA

EOL

Page 12: What to expect from Java 9

Что означает наступление дня EOL?

5

Page 13: What to expect from Java 9

Что означает наступление дня EOL?

Настал день EOLНужны исправления

найденных уязвимостей

&

5

Page 14: What to expect from Java 9

Что означает наступление дня EOL?

Настал день EOLНужны исправления

найденных уязвимостей

&

5

Page 15: What to expect from Java 9

Что означает наступление дня EOL?

Настал день EOLНужны исправления

найденных уязвимостей

&

Подписать Support Contract c

Oracle

5

Page 16: What to expect from Java 9

Что означает наступление дня EOL?

Настал день EOLНужны исправления

найденных уязвимостей

&

Подписать Support Contract c

Oracle

Перейти на OpenJDK (Zulu, IcedTea, сборку своими силами)

5

Page 17: What to expect from Java 9

Что означает наступление дня EOL?

Настал день EOLНужны исправления

найденных уязвимостей

&

Подписать Support Contract c

Oracle

Перейти на OpenJDK (Zulu, IcedTea, сборку своими силами)

Обновиться до следующей версии JDK

5

Page 18: What to expect from Java 9

Вспомним новое в Java 8

6

Page 19: What to expect from Java 9

Вспомним новое в Java 8• Лямбды

• Method references

• Type аннотации

• Повторяющиеся аннотации • Интерфейсные методы

6

Page 20: What to expect from Java 9

Вспомним новое в Java 8• Лямбды

• Method references

• Type аннотации

• Повторяющиеся аннотации • Интерфейсные методы

6

• Stream API

• Date Time API• Замена PermGen• Nashorn, JavaScript Engine• Новые утилиты (jdeps,jjs,..)

Page 21: What to expect from Java 9

От идей до нового функционала Java

7

Page 22: What to expect from Java 9

От идей до нового функционала Java

JEP предложен

7

Page 23: What to expect from Java 9

От идей до нового функционала Java

JEP предложен

JEP принят, найден “спонсор”

7

Page 24: What to expect from Java 9

От идей до нового функционала Java

JEP предложен

JEP принят, найден “спонсор”

JEP подтвержден для Java версии N

7

Page 25: What to expect from Java 9

От идей до нового функционала Java

JEP предложен

JEP принят, найден “спонсор”

JEP подтвержден для Java версии N

JEP реализован7

Page 26: What to expect from Java 9

Путь JSR

Source: https://groups.google.com/forum/#!topic/java-social/InafCPMLLaA8

Page 27: What to expect from Java 9

Путь JSR

Source: https://groups.google.com/forum/#!topic/java-social/InafCPMLLaA8

Page 28: What to expect from Java 9

Ориентировочное расписание выхода Java 9

9

Page 29: What to expect from Java 9

Ориентировочное расписание выхода Java 9Fe

atur

e co

mpl

ete

Zero

Bug

Bou

nce

Ram

pdow

n ph

ase

2Fin

al Re

lease

Can

dida

te

Дек’1

5

All te

sts ru

nRa

mpd

own

Star

t

Gene

ral A

vaila

bility

Фев ’

16

Фев ’

16

Апр

’16

Июнь

’16

Июль

’16

Сент

’16

9

Page 30: What to expect from Java 9

Ориентировочное расписание выхода Java 9Fe

atur

e co

mpl

ete

Zero

Bug

Bou

nce

Ram

pdow

n ph

ase

2Fin

al Re

lease

Can

dida

te

Дек’1

5

All te

sts ru

nRa

mpd

own

Star

t

Gene

ral A

vaila

bility

Фев ’

16

Фев ’

16

Апр

’16

Июнь

’16

Июль

’16

Сент

’16

9

Page 31: What to expect from Java 9

Модули

10

Page 32: What to expect from Java 9

10

Page 33: What to expect from Java 9

Инкапсуляция кода

11

Page 34: What to expect from Java 9

Поля & Методы

Инкапсуляция кода

11

Page 35: What to expect from Java 9

Классы

Поля & Методы

Инкапсуляция кода

11

Page 36: What to expect from Java 9

Классы

Поля & Методы

Интерфейсы

Абстрактные Классы

Инкапсуляция кода

11

Page 37: What to expect from Java 9

Пакеты

Классы

Поля & Методы

Интерфейсы

Абстрактные Классы

Инкапсуляция кода

11

Page 38: What to expect from Java 9

Модули

Пакеты

Классы

Поля & Методы

Интерфейсы

Абстрактные Классы

Инкапсуляция кода

11

Page 39: What to expect from Java 9

Проблемы существующей модели

12

Page 40: What to expect from Java 9

Проблемы существующей модели• Java Runtime большой и “тяжелый” и будет дальше расти

12

Page 41: What to expect from Java 9

Проблемы существующей модели• Java Runtime большой и “тяжелый” и будет дальше расти

• Профайлы 1, 2, 3 лишь частично решают проблему

12

Page 42: What to expect from Java 9

Проблемы существующей модели• Java Runtime большой и “тяжелый” и будет дальше расти

• Профайлы 1, 2, 3 лишь частично решают проблему

• Jar / Classpath Hell

12

Page 43: What to expect from Java 9

Проблемы существующей модели• Java Runtime большой и “тяжелый” и будет дальше расти

• Профайлы 1, 2, 3 лишь частично решают проблему

• Jar / Classpath Hell

• Что от чего зависит?..

12

Page 44: What to expect from Java 9

Проблемы существующей модели• Java Runtime большой и “тяжелый” и будет дальше расти

• Профайлы 1, 2, 3 лишь частично решают проблему

• Jar / Classpath Hell

• Что от чего зависит?..

• Опциональные и транзитивные зависимости

12

Page 45: What to expect from Java 9

Проблемы существующей модели• Java Runtime большой и “тяжелый” и будет дальше расти

• Профайлы 1, 2, 3 лишь частично решают проблему

• Jar / Classpath Hell

• Что от чего зависит?..

• Опциональные и транзитивные зависимости

• Ленивая загрузка и инициализация классов -> NoClassDefFoundError

12

Page 46: What to expect from Java 9

Проблемы существующей модели• Java Runtime большой и “тяжелый” и будет дальше расти

• Профайлы 1, 2, 3 лишь частично решают проблему

• Jar / Classpath Hell

• Что от чего зависит?..

• Опциональные и транзитивные зависимости

• Ленивая загрузка и инициализация классов -> NoClassDefFoundError

• Примитивный механизм видимости для кода вне пакетов - только public

12

Page 47: What to expect from Java 9

Проблемы существующей модели• Java Runtime большой и “тяжелый” и будет дальше расти

• Профайлы 1, 2, 3 лишь частично решают проблему

• Jar / Classpath Hell

• Что от чего зависит?..

• Опциональные и транзитивные зависимости

• Ленивая загрузка и инициализация классов -> NoClassDefFoundError

• Примитивный механизм видимости для кода вне пакетов - только public

• Классы из разных загрузчиков классов “видят” друг друга

12

Page 48: What to expect from Java 9

Проблемы существующей модели• Java Runtime большой и “тяжелый” и будет дальше расти

• Профайлы 1, 2, 3 лишь частично решают проблему

• Jar / Classpath Hell

• Что от чего зависит?..

• Опциональные и транзитивные зависимости

• Ленивая загрузка и инициализация классов -> NoClassDefFoundError

• Примитивный механизм видимости для кода вне пакетов - только public

• Классы из разных загрузчиков классов “видят” друг друга

• SecurityManager помогает, но об этом надо знать12

Page 49: What to expect from Java 9

Jigsaw

13

Page 50: What to expect from Java 9

Jigsaw

Модули в Java

13

Page 51: What to expect from Java 9

Jigsaw

Модулярность JDKМодули в Java

13

Page 52: What to expect from Java 9

Jigsaw

JSR 376: Java Platform Module SystemJEP 261: Module System

Модулярность JDKМодули в Java

13

Page 53: What to expect from Java 9

Jigsaw

JEP 162: Prepare for ModularizationJEP 200: The Modular JDKJEP 220: Modular Run-Time ImagesJEP 201: Modular Source CodeJEP 260: Encapsulate Most Internal APIs

JSR 376: Java Platform Module SystemJEP 261: Module System

Модулярность JDKМодули в Java

13

Page 54: What to expect from Java 9

Пример 1

14

Page 55: What to expect from Java 9

Пример 1Модуль S Модуль P

14

Page 56: What to expect from Java 9

Пример 1src/s/module-info.java

module s { exports com.azul.services; }

src/p/module-info.java

module p { requires s; }

Модуль S Модуль P

14

Page 57: What to expect from Java 9

Пример 1src/s/module-info.java

module s { exports com.azul.services; }

src/p/module-info.java

module p { requires s; }

Модуль S Модуль P

14

Page 58: What to expect from Java 9

Пример 1src/s/module-info.java

module s { exports com.azul.services; }

src/p/module-info.java

module p { requires s; }

src/s/com/azul/services/LocProvider.java

package com.azul.services; import java.lang.String;

public class LocProvider { public static String getLocation() { return "Joker 2015"; } }

src/p/com/azul/presentations/ModulesDemo.java

package com.azul.presentations; import com.azul.services.LocProvider;

public class ModulesDemo { public static void main(java.lang.String[] argv) { System.out.println("I am at "+LocProvider.getLocation()); } }

Модуль S Модуль P

14

Page 59: What to expect from Java 9

Новые параметры javac/java (1)

15

Page 60: What to expect from Java 9

Новые параметры javac/java (1)• # Компиляция

• $cd/src

• $J/javac -modulesourcepath . -mp s -d target s/module-info.java s/com/azul/services/LocProvider.java

• $J/javac -modulesourcepath . -mp p -d target p/module-info.java p/com/azul/presentations/ModulesDemo.java

• # Запуск

• $J/java -mp target -m p/com.azul.presentations.ModulesDemo

15

Page 61: What to expect from Java 9

Новые параметры javac/java (2)

16

Page 62: What to expect from Java 9

Новые параметры javac/java (2)

16

• # Упаковка

• $J/jar --create --file ./jars/p.jar -e com.azul.presentations/ModulesDemo -C target/p .

• # Запуск

• $j/bin/java -mp jars -m p

Page 63: What to expect from Java 9

Пример 2

17

Page 64: What to expect from Java 9

Пример 2./nashorn/src/jdk.scripting.nashorn/share/classes/module-info.java

module jdk.scripting.nashorn { requires java.logging; requires public java.scripting;

uses jdk.internal.dynalink.linker.GuardingDynamicLinker; uses jdk.nashorn.internal.runtime.CodeStore; provides javax.script.ScriptEngineFactory with jdk.nashorn.api.scripting.NashornScriptEngineFactory;

exports jdk.nashorn.api.scripting; exports jdk.nashorn.api.tree;

exports jdk.nashorn.internal.runtime to jdk.scripting.nashorn.shell; exports jdk.nashorn.internal.objects to jdk.scripting.nashorn.shell; exports jdk.nashorn.tools to jdk.scripting.nashorn.shell; }

17

Page 65: What to expect from Java 9

Пример 2./nashorn/src/jdk.scripting.nashorn/share/classes/module-info.java

module jdk.scripting.nashorn { requires java.logging; requires public java.scripting;

uses jdk.internal.dynalink.linker.GuardingDynamicLinker; uses jdk.nashorn.internal.runtime.CodeStore; provides javax.script.ScriptEngineFactory with jdk.nashorn.api.scripting.NashornScriptEngineFactory;

exports jdk.nashorn.api.scripting; exports jdk.nashorn.api.tree;

exports jdk.nashorn.internal.runtime to jdk.scripting.nashorn.shell; exports jdk.nashorn.internal.objects to jdk.scripting.nashorn.shell; exports jdk.nashorn.tools to jdk.scripting.nashorn.shell; }

17

Page 66: What to expect from Java 9

Пример 2./nashorn/src/jdk.scripting.nashorn/share/classes/module-info.java

module jdk.scripting.nashorn { requires java.logging; requires public java.scripting;

uses jdk.internal.dynalink.linker.GuardingDynamicLinker; uses jdk.nashorn.internal.runtime.CodeStore; provides javax.script.ScriptEngineFactory with jdk.nashorn.api.scripting.NashornScriptEngineFactory;

exports jdk.nashorn.api.scripting; exports jdk.nashorn.api.tree;

exports jdk.nashorn.internal.runtime to jdk.scripting.nashorn.shell; exports jdk.nashorn.internal.objects to jdk.scripting.nashorn.shell; exports jdk.nashorn.tools to jdk.scripting.nashorn.shell; }

17

Page 67: What to expect from Java 9

Пример 2./nashorn/src/jdk.scripting.nashorn/share/classes/module-info.java

module jdk.scripting.nashorn { requires java.logging; requires public java.scripting;

uses jdk.internal.dynalink.linker.GuardingDynamicLinker; uses jdk.nashorn.internal.runtime.CodeStore; provides javax.script.ScriptEngineFactory with jdk.nashorn.api.scripting.NashornScriptEngineFactory;

exports jdk.nashorn.api.scripting; exports jdk.nashorn.api.tree;

exports jdk.nashorn.internal.runtime to jdk.scripting.nashorn.shell; exports jdk.nashorn.internal.objects to jdk.scripting.nashorn.shell; exports jdk.nashorn.tools to jdk.scripting.nashorn.shell; }

17

Page 68: What to expect from Java 9

Пример 2./nashorn/src/jdk.scripting.nashorn/share/classes/module-info.java

module jdk.scripting.nashorn { requires java.logging; requires public java.scripting;

uses jdk.internal.dynalink.linker.GuardingDynamicLinker; uses jdk.nashorn.internal.runtime.CodeStore; provides javax.script.ScriptEngineFactory with jdk.nashorn.api.scripting.NashornScriptEngineFactory;

exports jdk.nashorn.api.scripting; exports jdk.nashorn.api.tree;

exports jdk.nashorn.internal.runtime to jdk.scripting.nashorn.shell; exports jdk.nashorn.internal.objects to jdk.scripting.nashorn.shell; exports jdk.nashorn.tools to jdk.scripting.nashorn.shell; }

17

Page 69: What to expect from Java 9

Пример 2./nashorn/src/jdk.scripting.nashorn/share/classes/module-info.java

module jdk.scripting.nashorn { requires java.logging; requires public java.scripting;

uses jdk.internal.dynalink.linker.GuardingDynamicLinker; uses jdk.nashorn.internal.runtime.CodeStore; provides javax.script.ScriptEngineFactory with jdk.nashorn.api.scripting.NashornScriptEngineFactory;

exports jdk.nashorn.api.scripting; exports jdk.nashorn.api.tree;

exports jdk.nashorn.internal.runtime to jdk.scripting.nashorn.shell; exports jdk.nashorn.internal.objects to jdk.scripting.nashorn.shell; exports jdk.nashorn.tools to jdk.scripting.nashorn.shell; }

17

Page 70: What to expect from Java 9

Пример 2./nashorn/src/jdk.scripting.nashorn/share/classes/module-info.java

module jdk.scripting.nashorn { requires java.logging; requires public java.scripting;

uses jdk.internal.dynalink.linker.GuardingDynamicLinker; uses jdk.nashorn.internal.runtime.CodeStore; provides javax.script.ScriptEngineFactory with jdk.nashorn.api.scripting.NashornScriptEngineFactory;

exports jdk.nashorn.api.scripting; exports jdk.nashorn.api.tree;

exports jdk.nashorn.internal.runtime to jdk.scripting.nashorn.shell; exports jdk.nashorn.internal.objects to jdk.scripting.nashorn.shell; exports jdk.nashorn.tools to jdk.scripting.nashorn.shell; }

17

Page 71: What to expect from Java 9

Пример 2./nashorn/src/jdk.scripting.nashorn/share/classes/module-info.java

module jdk.scripting.nashorn { requires java.logging; requires public java.scripting;

uses jdk.internal.dynalink.linker.GuardingDynamicLinker; uses jdk.nashorn.internal.runtime.CodeStore; provides javax.script.ScriptEngineFactory with jdk.nashorn.api.scripting.NashornScriptEngineFactory;

exports jdk.nashorn.api.scripting; exports jdk.nashorn.api.tree;

exports jdk.nashorn.internal.runtime to jdk.scripting.nashorn.shell; exports jdk.nashorn.internal.objects to jdk.scripting.nashorn.shell; exports jdk.nashorn.tools to jdk.scripting.nashorn.shell; }

META-INF/services

17

Page 72: What to expect from Java 9

Cосуществование cp и mp

18

Page 73: What to expect from Java 9

Cосуществование cp и mp• Всё, что попало в cp считается попавшим в безымянный (unnamed) модуль

18

Page 74: What to expect from Java 9

Cосуществование cp и mp• Всё, что попало в cp считается попавшим в безымянный (unnamed) модуль

• Безымянные модули видят все именованные модули (requires *)

18

Page 75: What to expect from Java 9

Cосуществование cp и mp• Всё, что попало в cp считается попавшим в безымянный (unnamed) модуль

• Безымянные модули видят все именованные модули (requires *)

• Обратное - неверное, надо указать requires unnamed или …

18

Page 76: What to expect from Java 9

Cосуществование cp и mp• Всё, что попало в cp считается попавшим в безымянный (unnamed) модуль

• Безымянные модули видят все именованные модули (requires *)

• Обратное - неверное, надо указать requires unnamed или …

• jar файл, который попал в mp автоматически превращается в модуль с названием, совпадающим с названием jar-файла

18

Page 77: What to expect from Java 9

Cосуществование cp и mp• Всё, что попало в cp считается попавшим в безымянный (unnamed) модуль

• Безымянные модули видят все именованные модули (requires *)

• Обратное - неверное, надо указать requires unnamed или …

• jar файл, который попал в mp автоматически превращается в модуль с названием, совпадающим с названием jar-файла

• автомодули становятся мостом для видимости именными модулями классов в безымянным модуле

18

Page 78: What to expect from Java 9

Cосуществование cp и mp• Всё, что попало в cp считается попавшим в безымянный (unnamed) модуль

• Безымянные модули видят все именованные модули (requires *)

• Обратное - неверное, надо указать requires unnamed или …

• jar файл, который попал в mp автоматически превращается в модуль с названием, совпадающим с названием jar-файла

• автомодули становятся мостом для видимости именными модулями классов в безымянным модуле

• Типы ищутся безымянном модуле в последнюю очередь 18

Page 79: What to expect from Java 9

19

jdeps -genmoduleinfo

cat /Users/ivan/test/modules/generated/glassfish.corba.omgapi/module-info.java module glassfish.corba.omgapi { requires public java.corba; requires public java.desktop; requires public java.rmi; exports com.sun.corba.ee.org.omg.CORBA; exports javax.rmi.CORBA; exports org.omg.CORBA; exports org.omg.CORBA.DynAnyPackage; exports org.omg.CORBA.ORBPackage; exports org.omg.CORBA.TSIdentificationPackage; exports org.omg.CORBA.TypeCodePackage; exports org.omg.CORBA.portable; exports org.omg.CORBA_2_3; exports org.omg.CORBA_2_3.portable; exports org.omg.CosNaming; exports org.omg.CosNaming.NamingContextExtPackage; exports org.omg.CosNaming.NamingContextPackage; exports org.omg.CosTSInteroperation; exports org.omg.CosTSPortability; exports org.omg.CosTransactions; exports org.omg.Dynamic; exports org.omg.DynamicAny; exports org.omg.DynamicAny.DynAnyFactoryPackage; exports org.omg.DynamicAny.DynAnyPackage; exports org.omg.IOP; exports org.omg.IOP.CodecFactoryPackage; exports org.omg.IOP.CodecPackage; exports org.omg.Messaging; exports org.omg.PortableInterceptor; exports org.omg.PortableInterceptor.ORBInitInfoPackage; exports org.omg.PortableServer; exports org.omg.PortableServer.CurrentPackage; exports org.omg.PortableServer.POAManagerPackage; exports org.omg.PortableServer.POAPackage; exports org.omg.SendingContext; exports org.omg.stub.java.rmi; }

jdeps

-genmoduleinfo ~/test/modules/generated/

glassfish-4.1.1/glassfish/modules/glassfish-corba-omgapi.jar

Page 80: What to expect from Java 9

20

jdeps -jdkinternalsglassfish-corba-orb.jar -> java.corba com.sun.corba.ee.impl.copyobject.OldReflectObjectCopierImpl (glassfish-corba-orb.jar) -> sun.corba.Bridge JDK internal API (java.corba) com.sun.corba.ee.impl.copyobject.OldReflectObjectCopierImpl$1 (glassfish-corba-orb.jar) -> sun.corba.Bridge JDK internal API (java.corba) com.sun.corba.ee.impl.encoding.BufferManagerWriteStream (glassfish-corba-orb.jar) -> sun.corba.Bridge JDK internal API (java.corba) com.sun.corba.ee.impl.io.IIOPInputStream (glassfish-corba-orb.jar) -> sun.corba.Bridge JDK internal API (java.corba) com.sun.corba.ee.impl.io.IIOPInputStream$1 (glassfish-corba-orb.jar) -> sun.corba.Bridge JDK internal API (java.corba) com.sun.corba.ee.impl.io.IIOPOutputStream (glassfish-corba-orb.jar) -> sun.corba.Bridge JDK internal API (java.corba) com.sun.corba.ee.impl.io.IIOPOutputStream$1 (glassfish-corba-orb.jar) -> sun.corba.Bridge JDK internal API (java.corba) com.sun.corba.ee.impl.io.ObjectStreamClass (glassfish-corba-orb.jar) -> sun.corba.Bridge JDK internal API (java.corba) com.sun.corba.ee.impl.io.ObjectStreamClass$1 (glassfish-corba-orb.jar) -> sun.corba.Bridge JDK internal API (java.corba) com.sun.corba.ee.impl.io.ObjectStreamField (glassfish-corba-orb.jar) -> sun.corba.Bridge JDK internal API (java.corba) com.sun.corba.ee.impl.io.ObjectStreamField$1 (glassfish-corba-orb.jar) -> sun.corba.Bridge JDK internal API (java.corba) com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl$1 (glassfish-corba-orb.jar) -> com.sun.jndi.cosnaming.CNCtx JDK internal API (java.corba) com.sun.corba.ee.impl.util.JDKClassLoader (glassfish-corba-orb.jar) -> sun.corba.Bridge JDK internal API (java.corba) com.sun.corba.ee.impl.util.JDKClassLoader$1 (glassfish-corba-orb.jar) -> sun.corba.Bridge JDK internal API (java.corba)

jdeps

-jdkinternals

glassfish/ modules/ glassfish-corba-orb.jar

Page 81: What to expect from Java 9

21

java -XaddExports

java -XaddExports :java.base/sun.security.provider=ALL-UNNAMED, java.base/sun.security.pkcs=ALL-UNNAMED, java.base/sun.security.util=ALL-UNNAMED, java.base/sun.security.x509=ALL-UNNAMED, :

Page 82: What to expect from Java 9

Модулярность

Source: http://openjdk.java.net/projects/jigsaw/doc/jdk-modularization.html22

Page 83: What to expect from Java 9

Модулярность

Source: http://openjdk.java.net/projects/jigsaw/doc/jdk-modularization.html

JDK 7 b65

22

Page 84: What to expect from Java 9

Модулярность

Source: http://openjdk.java.net/projects/jigsaw/doc/jdk-modularization.html

JDK 8 b48

22

Page 85: What to expect from Java 9

Модулярность

Source: http://openjdk.java.net/projects/jigsaw/doc/jdk-modularization.html

JDK9 EA

22

Page 86: What to expect from Java 9

О чем я не расскажу сегодня

23

Page 87: What to expect from Java 9

О чем я не расскажу сегодня

23

• Reflection и модули. Новый класс java.lang.reflect.Module. Видимость и рефлекшн

Page 88: What to expect from Java 9

О чем я не расскажу сегодня

23

• Reflection и модули. Новый класс java.lang.reflect.Module. Видимость и рефлекшн

• Модуляризованный jar; multirelease jar

Page 89: What to expect from Java 9

О чем я не расскажу сегодня

23

• Reflection и модули. Новый класс java.lang.reflect.Module. Видимость и рефлекшн

• Модуляризованный jar; multirelease jar

• Пакеты с одинаковыми названиями и внезапные NoClassDefFoundException

Page 90: What to expect from Java 9

О чем я не расскажу сегодня

23

• Reflection и модули. Новый класс java.lang.reflect.Module. Видимость и рефлекшн

• Модуляризованный jar; multirelease jar

• Пакеты с одинаковыми названиями и внезапные NoClassDefFoundException

• Layers - новая абстракция над classloaders

Page 91: What to expect from Java 9

О чем я не расскажу сегодня

23

• Reflection и модули. Новый класс java.lang.reflect.Module. Видимость и рефлекшн

• Модуляризованный jar; multirelease jar

• Пакеты с одинаковыми названиями и внезапные NoClassDefFoundException

• Layers - новая абстракция над classloaders

• Инструментарий для модуляризации кода

• <java9_jigsaw>/bin/jdeps -help

• IDE скоро помогут

Page 92: What to expect from Java 9

О чем я не расскажу сегодня

23

• Reflection и модули. Новый класс java.lang.reflect.Module. Видимость и рефлекшн

• Модуляризованный jar; multirelease jar

• Пакеты с одинаковыми названиями и внезапные NoClassDefFoundException

• Layers - новая абстракция над classloaders

• Инструментарий для модуляризации кода

• <java9_jigsaw>/bin/jdeps -help

• IDE скоро помогут

• Циркулярные зависимости между модулями через загрузчики модулей и как их избежать

Page 93: What to expect from Java 9

(Мои) Выводы про модули в Java 9

24

Page 94: What to expect from Java 9

(Мои) Выводы про модули в Java 9• Цель - явное обязательное указание зависимостей

24

Page 95: What to expect from Java 9

(Мои) Выводы про модули в Java 9• Цель - явное обязательное указание зависимостей

• Пересечение с OSGi незначительное

24

Page 96: What to expect from Java 9

(Мои) Выводы про модули в Java 9• Цель - явное обязательное указание зависимостей

• Пересечение с OSGi незначительное

• Предоставляет новые возможности по оптимизации

24

Page 97: What to expect from Java 9

(Мои) Выводы про модули в Java 9• Цель - явное обязательное указание зависимостей

• Пересечение с OSGi незначительное

• Предоставляет новые возможности по оптимизации

• Сохранена совместимость с jar/cp (именные м., безымянный м., автомодули)

24

Page 98: What to expect from Java 9

(Мои) Выводы про модули в Java 9• Цель - явное обязательное указание зависимостей

• Пересечение с OSGi незначительное

• Предоставляет новые возможности по оптимизации

• Сохранена совместимость с jar/cp (именные м., безымянный м., автомодули)

• jigsaw теряет функциональность на пути к финалу

• поддержка версий была еще весной 2015, осталась лишь декларация

24

Page 99: What to expect from Java 9

(Мои) Выводы про модули в Java 9• Цель - явное обязательное указание зависимостей

• Пересечение с OSGi незначительное

• Предоставляет новые возможности по оптимизации

• Сохранена совместимость с jar/cp (именные м., безымянный м., автомодули)

• jigsaw теряет функциональность на пути к финалу

• поддержка версий была еще весной 2015, осталась лишь декларация

• IDEs учатся работать с модулями24

Page 100: What to expect from Java 9

Jigsaw - статус, ссылки

25

Page 102: What to expect from Java 9

Jigsaw - статус, ссылки• Работа продолжается

• Статья о текущем состоянии (Сентябрь 2015)

• http://openjdk.java.net/projects/jigsaw/spec/sotms/

25

Page 103: What to expect from Java 9

Jigsaw - статус, ссылки• Работа продолжается

• Статья о текущем состоянии (Сентябрь 2015)

• http://openjdk.java.net/projects/jigsaw/spec/sotms/

• Доклады с JavaOne (октябрь 2015)

• http://openjdk.java.net/projects/jigsaw/j1/

25

Page 104: What to expect from Java 9

Jigsaw - статус, ссылки• Работа продолжается

• Статья о текущем состоянии (Сентябрь 2015)

• http://openjdk.java.net/projects/jigsaw/spec/sotms/

• Доклады с JavaOne (октябрь 2015)

• http://openjdk.java.net/projects/jigsaw/j1/

• Код не залит в основной репозиторий, а находится в репозитории Jake

• http://hg.openjdk.java.net/jigsaw/jake/

25

Page 105: What to expect from Java 9

Jigsaw - статус, ссылки• Работа продолжается

• Статья о текущем состоянии (Сентябрь 2015)

• http://openjdk.java.net/projects/jigsaw/spec/sotms/

• Доклады с JavaOne (октябрь 2015)

• http://openjdk.java.net/projects/jigsaw/j1/

• Код не залит в основной репозиторий, а находится в репозитории Jake

• http://hg.openjdk.java.net/jigsaw/jake/

• А также: http://blog.codefx.org/java/dev/features-project-jigsaw-java-9/25

Page 106: What to expect from Java 9

JShell

26

Page 107: What to expect from Java 9

JShell• Развивается в рамках проекта Kulla

• http://openjdk.java.net/projects/kulla/

26

Page 108: What to expect from Java 9

JShell• Развивается в рамках проекта Kulla

• http://openjdk.java.net/projects/kulla/

• Интегрирован в openjdk9/dev b90

26

Page 109: What to expect from Java 9

JShell• Развивается в рамках проекта Kulla

• http://openjdk.java.net/projects/kulla/

• Интегрирован в openjdk9/dev b90

• Позволяет попробовать синтаксис без написания законченной программы

26

Page 110: What to expect from Java 9

JShell• Развивается в рамках проекта Kulla

• http://openjdk.java.net/projects/kulla/

• Интегрирован в openjdk9/dev b90

• Позволяет попробовать синтаксис без написания законченной программы

• Помогает обучать языку Java

26

Page 111: What to expect from Java 9

JShell• Развивается в рамках проекта Kulla

• http://openjdk.java.net/projects/kulla/

• Интегрирован в openjdk9/dev b90

• Позволяет попробовать синтаксис без написания законченной программы

• Помогает обучать языку Javaclass HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } }

26

Page 112: What to expect from Java 9

JShell• Развивается в рамках проекта Kulla

• http://openjdk.java.net/projects/kulla/

• Интегрирован в openjdk9/dev b90

• Позволяет попробовать синтаксис без написания законченной программы

• Помогает обучать языку Javaclass HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } }

26

Page 113: What to expect from Java 9

Kulla…

27

Page 114: What to expect from Java 9

Кулла?

28

Page 115: What to expect from Java 9

Кулла?

28

Page 116: What to expect from Java 9

Kulla?

29

Page 117: What to expect from Java 9

Kulla?

29

Page 118: What to expect from Java 9

Jshell Demo

30

Page 119: What to expect from Java 9

JShell - примеры

31

Page 120: What to expect from Java 9

JShell - примеры> ./images/jdk/bin/jshell

-> String s=new String("hello");

| Added variable s of type String with initial value “hello”

-> new String("hello");

| Expression value is: "hello"

| assigned to temporary variable $1 of type String

-> System.out.println($1);

h

-> ello

-> System.out.println("Не имей 100 \u20BD, а имей 1 \u00A3 или 32 \u20B4"); System.out.flush();

Не имей 100 ₽, а имей 1 £ или 32 ₴31

Page 121: What to expect from Java 9

Garbage First включен по умолчанию

32

Page 122: What to expect from Java 9

Garbage First включен по умолчанию• Плюсы

• Самый современный GC в HotSpot (хоть и разрабатывается уже 10+ лет)

• Региональный параллельный одновременный коллектор

• Нацелен быть лучшим во всем - Предсказуемые паузы и высокая производительность!

• По умолчанию => Больше пользовательская база => Ошибки находятся быстрее => G1 будет доведен до ума очень быстро

32

Page 123: What to expect from Java 9

Garbage First включен по умолчанию• Плюсы

• Самый современный GC в HotSpot (хоть и разрабатывается уже 10+ лет)

• Региональный параллельный одновременный коллектор

• Нацелен быть лучшим во всем - Предсказуемые паузы и высокая производительность!

• По умолчанию => Больше пользовательская база => Ошибки находятся быстрее => G1 будет доведен до ума очень быстро

• Минусы

• Эргономика работает по-другому. Могут проявиться ошибки в синхронизации в вашем или библиотечном коде

32

Page 124: What to expect from Java 9

Garbage First включен по умолчанию• Плюсы

• Самый современный GC в HotSpot (хоть и разрабатывается уже 10+ лет)

• Региональный параллельный одновременный коллектор

• Нацелен быть лучшим во всем - Предсказуемые паузы и высокая производительность!

• По умолчанию => Больше пользовательская база => Ошибки находятся быстрее => G1 будет доведен до ума очень быстро

• Минусы

• Эргономика работает по-другому. Могут проявиться ошибки в синхронизации в вашем или библиотечном коде

• Жирные минусы

• Есть несовместимости с G1 в Cassandra, Elasticsearch, Lucene, и т.п,. А вы уверены в библиотеках, которые используете?

• Источник (датировано июлем 2015): https://groups.google.com/forum/#!topic/mechanical-sympathy/JxsuVtIIOaY

32

Page 125: What to expect from Java 9

Как пережить смену default GC, не теряя сон

33

Page 126: What to expect from Java 9

Как пережить смену default GC, не теряя сон• Если до сих пор вас устраивали настройки GC по умолчанию

• запаситесь данными эргономики для вашего приложения и среды внедрения

• пропишите явным образом флаги настройки GC в деплоймент скриптах

33

Page 127: What to expect from Java 9

Как пережить смену default GC, не теряя сон• Если до сих пор вас устраивали настройки GC по умолчанию

• запаситесь данными эргономики для вашего приложения и среды внедрения

• пропишите явным образом флаги настройки GC в деплоймент скриптах

• Если вы и ранее явно выбирали GC и флаги GC

• Ничего не изменится, старые коллекторы не исчезнут

33

Page 128: What to expect from Java 9

Как пережить смену default GC, не теряя сон• Если до сих пор вас устраивали настройки GC по умолчанию

• запаситесь данными эргономики для вашего приложения и среды внедрения

• пропишите явным образом флаги настройки GC в деплоймент скриптах

• Если вы и ранее явно выбирали GC и флаги GC

• Ничего не изменится, старые коллекторы не исчезнут

• В обоих случаях - экспериментируйте с G1

33

Page 129: What to expect from Java 9

Как пережить смену default GC, не теряя сон• Если до сих пор вас устраивали настройки GC по умолчанию

• запаситесь данными эргономики для вашего приложения и среды внедрения

• пропишите явным образом флаги настройки GC в деплоймент скриптах

• Если вы и ранее явно выбирали GC и флаги GC

• Ничего не изменится, старые коллекторы не исчезнут

• В обоих случаях - экспериментируйте с G1

• Главное - понимать основные принципы работы GC

• Прежде всего - метрики, которыми оценивают алгоритмы GC

• Что еще почитать: http://www.infoq.com/minibooks/java-garbage-collection33

Page 130: What to expect from Java 9

Обновления языка - Milling Project Coin• Приватные методы в интерфейсах

interface I { private void foo(String s); // Error: private method must declare body. private abstract void foo(int i, int j); // Error: private & abstract: bad combo void foo(int x); // OK. private I foo() { return null; } // OK. }

34

Page 131: What to expect from Java 9

Обновления языка - Milling Project Coin

• Effectively-final переменные могут использоваться в try-with-resources выражениях

35

public static void main(String... args) throws …{ FileReader f = new FileReader(“test.txt”); br =new BufferedReader(fr); try (br) { // do something } catch (Exception ex) { } }

public static void main(String... args) throws …{ FileReader f = new FileReader(“test.txt"); try (br =new BufferedReader(fr)) { // do something } catch (Exception ex) { } }

Page 132: What to expect from Java 9

Обновления языка - Milling Project Coin

• Использование @SafeVarargs в private методах

class VarargsFinalOnly { @SafeVarargs void m(List<String>... args) { } }

36

Page 133: What to expect from Java 9

Обновления языка - Milling Project Coin• Использование diamond с анонимными классами при возможности определения типа, который подразумевается под diamond

37

interface I {} class C {} class B extends C implements I {}

class Test <T extends C & I>{ class A <T>{ public A(T b) { } } public void foo(){ A a = new Test<>().new A<>(new B()){} ; } }

error: cannot infer type arguments for Test.A<> A a = new Test<>().new A<>(new B()){} ; reason: type argument INT#1 inferred for Test.A<> is not allowed in this context inferred argument is not expressible in the Signature attribute where INT#1 is an intersection type: INT#1 extends C,I

Page 134: What to expect from Java 9

Обновления языка - Milling Project Coin• Запрет на использование _ из всех имен типов, констант и т.п.

38

// key: compiler.warn.underscore.as.identifier // options: -source 8 -Xlint:-options

class UnderscoreAsIdentifierWarning { String _ = null; }

Page 135: What to expect from Java 9

Currency API

Источники: https://github.com/JavaMoney/jsr354-api http://javamoney.java.net http://www.infoq.com/articles/ JSR-354-Java-Money-Currency-API39

Page 136: What to expect from Java 9

Currency API• JSR 354: Money and Currency API

Источники: https://github.com/JavaMoney/jsr354-api http://javamoney.java.net http://www.infoq.com/articles/ JSR-354-Java-Money-Currency-API39

Page 137: What to expect from Java 9

Currency API• JSR 354: Money and Currency API

• Функциональность включает:

Источники: https://github.com/JavaMoney/jsr354-api http://javamoney.java.net http://www.infoq.com/articles/ JSR-354-Java-Money-Currency-API39

Page 138: What to expect from Java 9

Currency API• JSR 354: Money and Currency API

• Функциональность включает:

• Специальное форматирование (например INR 12,23,123.34)

Источники: https://github.com/JavaMoney/jsr354-api http://javamoney.java.net http://www.infoq.com/articles/ JSR-354-Java-Money-Currency-API39

Page 139: What to expect from Java 9

Currency API• JSR 354: Money and Currency API

• Функциональность включает:

• Специальное форматирование (например INR 12,23,123.34)

• thread safe format classes

Источники: https://github.com/JavaMoney/jsr354-api http://javamoney.java.net http://www.infoq.com/articles/ JSR-354-Java-Money-Currency-API39

Page 140: What to expect from Java 9

Currency API• JSR 354: Money and Currency API

• Функциональность включает:

• Специальное форматирование (например INR 12,23,123.34)

• thread safe format classes

• новая абстракция для финансовой арифметики (чтобы не использовать BigDecimal)

Источники: https://github.com/JavaMoney/jsr354-api http://javamoney.java.net http://www.infoq.com/articles/ JSR-354-Java-Money-Currency-API39

Page 141: What to expect from Java 9

Currency API• JSR 354: Money and Currency API

• Функциональность включает:

• Специальное форматирование (например INR 12,23,123.34)

• thread safe format classes

• новая абстракция для финансовой арифметики (чтобы не использовать BigDecimal)

• валюты не в ISO стандарте (виртуальные, из истории, придуманные)

Источники: https://github.com/JavaMoney/jsr354-api http://javamoney.java.net http://www.infoq.com/articles/ JSR-354-Java-Money-Currency-API39

Page 142: What to expect from Java 9

Currency API• JSR 354: Money and Currency API

• Функциональность включает:

• Специальное форматирование (например INR 12,23,123.34)

• thread safe format classes

• новая абстракция для финансовой арифметики (чтобы не использовать BigDecimal)

• валюты не в ISO стандарте (виртуальные, из истории, придуманные)

• API для конвертации валют Источники: https://github.com/JavaMoney/jsr354-api http://javamoney.java.net http://www.infoq.com/articles/ JSR-354-Java-Money-Currency-API39

Page 143: What to expect from Java 9

Currency API• JSR 354: Money and Currency API

• Функциональность включает:

• Специальное форматирование (например INR 12,23,123.34)

• thread safe format classes

• новая абстракция для финансовой арифметики (чтобы не использовать BigDecimal)

• валюты не в ISO стандарте (виртуальные, из истории, придуманные)

• API для конвертации валют

• ExchangeRate providers

Источники: https://github.com/JavaMoney/jsr354-api http://javamoney.java.net http://www.infoq.com/articles/ JSR-354-Java-Money-Currency-API39

Page 144: What to expect from Java 9

Currency API• JSR 354: Money and Currency API

• Функциональность включает:

• Специальное форматирование (например INR 12,23,123.34)

• thread safe format classes

• новая абстракция для финансовой арифметики (чтобы не использовать BigDecimal)

• валюты не в ISO стандарте (виртуальные, из истории, придуманные)

• API для конвертации валют

• ExchangeRate providers

Источники: https://github.com/JavaMoney/jsr354-api http://javamoney.java.net http://www.infoq.com/articles/ JSR-354-Java-Money-Currency-API

Collection<CurrencyUnit> currencies = Monetary.getCurrencies (CurrencyQueryBuilder.of().set ("continent", "Europe").set (Year.of(2015)).build());

39

Page 145: What to expect from Java 9

Обновление Process API

Source: http://blog.takipi.com/java-9-the-ultimate-feature-list/ 40

Page 146: What to expect from Java 9

Обновление Process API• JEP 102: Process API Updates

Source: http://blog.takipi.com/java-9-the-ultimate-feature-list/ 40

Page 147: What to expect from Java 9

Обновление Process API• JEP 102: Process API Updates

• Новое:

Source: http://blog.takipi.com/java-9-the-ultimate-feature-list/ 40

Page 148: What to expect from Java 9

Обновление Process API• JEP 102: Process API Updates

• Новое:

• Получить pid “своей” JVM

Source: http://blog.takipi.com/java-9-the-ultimate-feature-list/ 40

Page 149: What to expect from Java 9

Обновление Process API• JEP 102: Process API Updates

• Новое:

• Получить pid “своей” JVM

• Получить список процессов системы

Source: http://blog.takipi.com/java-9-the-ultimate-feature-list/ 40

Page 150: What to expect from Java 9

Обновление Process API• JEP 102: Process API Updates

• Новое:

• Получить pid “своей” JVM

• Получить список процессов системы

• Работа с деревьями процессов

Source: http://blog.takipi.com/java-9-the-ultimate-feature-list/ 40

Page 151: What to expect from Java 9

Обновление Process API• JEP 102: Process API Updates

• Новое:

• Получить pid “своей” JVM

• Получить список процессов системы

• Работа с деревьями процессов

Source: http://blog.takipi.com/java-9-the-ultimate-feature-list/

Process proc = Runtime.getRuntime() .exec(new String[]{ "/bin/sh", “-c", "echo $PPID" }); if (proc.waitFor() == 0) { InputStream in = proc.getInputStream(); int available = in.available(); byte[] outputBytes = new byte[available]; in.read(outputBytes); String pid = new String(outputBytes); System.out.println("Your pid is " + pid) }

40

Page 152: What to expect from Java 9

Обновление Process API• JEP 102: Process API Updates

• Новое:

• Получить pid “своей” JVM

• Получить список процессов системы

• Работа с деревьями процессов

Source: http://blog.takipi.com/java-9-the-ultimate-feature-list/

Process proc = Runtime.getRuntime() .exec(new String[]{ "/bin/sh", “-c", "echo $PPID" }); if (proc.waitFor() == 0) { InputStream in = proc.getInputStream(); int available = in.available(); byte[] outputBytes = new byte[available]; in.read(outputBytes); String pid = new String(outputBytes); System.out.println("Your pid is " + pid) }

System.out.println("Your pid is " + ProcessHandle.current().getPid());

40

Page 153: What to expect from Java 9

Обзор JEP-ов. Что уберут?

41

Page 154: What to expect from Java 9

Обзор JEP-ов. Что уберут?• 231: Remove Launch-Time JRE Version Selection

41

Page 155: What to expect from Java 9

Обзор JEP-ов. Что уберут?• 231: Remove Launch-Time JRE Version Selection

• 240: Remove the JVM TI hprof Agent

41

Page 156: What to expect from Java 9

Обзор JEP-ов. Что уберут?• 231: Remove Launch-Time JRE Version Selection

• 240: Remove the JVM TI hprof Agent

• 241: Remove the jhat Tool———————————

41

Page 157: What to expect from Java 9

Обзор JEP-ов. Что уберут?• 231: Remove Launch-Time JRE Version Selection

• 240: Remove the JVM TI hprof Agent

• 241: Remove the jhat Tool———————————

• Последствия подулярности (JEP - 261)

• -Xbootclasspath & -Xbootclasspath/p

• system property sun.boot.class.path

41

Page 158: What to expect from Java 9

Обзор JEP-ов. Что уберут?• 231: Remove Launch-Time JRE Version Selection

• 240: Remove the JVM TI hprof Agent

• 241: Remove the jhat Tool———————————

• Последствия подулярности (JEP - 261)

• -Xbootclasspath & -Xbootclasspath/p

• system property sun.boot.class.path

41

Page 159: What to expect from Java 9

Обзор JEP-ов. Ключевые API

42

Page 160: What to expect from Java 9

Обзор JEP-ов. Ключевые API

• 261, 162, 200, 201, 220, 260, 261 Модули и модулярность.

42

Page 161: What to expect from Java 9

Обзор JEP-ов. Ключевые API

• 261, 162, 200, 201, 220, 260, 261 Модули и модулярность.

• 102: Process API Updates

42

Page 162: What to expect from Java 9

Обзор JEP-ов. Ключевые API

• 261, 162, 200, 201, 220, 260, 261 Модули и модулярность.

• 102: Process API Updates

• 230: Microbenchmark Suite

42

Page 163: What to expect from Java 9

Обзор JEP-ов. Ключевые API

• 261, 162, 200, 201, 220, 260, 261 Модули и модулярность.

• 102: Process API Updates

• 230: Microbenchmark Suite

• 193: Variable Handles (?)

42

Page 164: What to expect from Java 9

Обзор JEP-ов. Ключевые API

• 261, 162, 200, 201, 220, 260, 261 Модули и модулярность.

• 102: Process API Updates

• 230: Microbenchmark Suite

• 193: Variable Handles (?)

• 227: Unicode 7.0

42

Page 165: What to expect from Java 9

Обзор JEP-ов. Ключевые API

• 261, 162, 200, 201, 220, 260, 261 Модули и модулярность.

• 102: Process API Updates

• 230: Microbenchmark Suite

• 193: Variable Handles (?)

• 227: Unicode 7.0

42

Page 166: What to expect from Java 9

Обзор JEP-ов. Ключевые API

• 261, 162, 200, 201, 220, 260, 261 Модули и модулярность.

• 102: Process API Updates

• 230: Microbenchmark Suite

• 193: Variable Handles (?)

• 227: Unicode 7.0 & 267: Unicode 8.0

42

Page 167: What to expect from Java 9

Обзор JEP-ов. Ключевые API

• 261, 162, 200, 201, 220, 260, 261 Модули и модулярность.

• 102: Process API Updates

• 230: Microbenchmark Suite

• 193: Variable Handles (?)

• 227: Unicode 7.0 & 267: Unicode 8.0

42

Page 168: What to expect from Java 9

Обзор JEP-ов. Ключевые API

• 261, 162, 200, 201, 220, 260, 261 Модули и модулярность.

• 102: Process API Updates

• 230: Microbenchmark Suite

• 193: Variable Handles (?)

• 227: Unicode 7.0 & 267: Unicode 8.0

42

Page 169: What to expect from Java 9

Обзор JEP-ов. Графика

43

Page 170: What to expect from Java 9

Обзор JEP-ов. Графика• 258: HarfBuzz Font-Layout Engine

43

Page 171: What to expect from Java 9

Обзор JEP-ов. Графика• 258: HarfBuzz Font-Layout Engine

• 263: HiDPI Graphics on Windows and Linux

43

Page 172: What to expect from Java 9

Обзор JEP-ов. Графика• 258: HarfBuzz Font-Layout Engine

• 263: HiDPI Graphics on Windows and Linux

• 265: Marlin Graphics Renderer

43

Page 173: What to expect from Java 9

Обзор JEP-ов. Графика• 258: HarfBuzz Font-Layout Engine

• 263: HiDPI Graphics on Windows and Linux

• 265: Marlin Graphics Renderer

• 262: TIFF Image I/O

43

Page 174: What to expect from Java 9

Обзор JEP-ов. Графика• 258: HarfBuzz Font-Layout Engine

• 263: HiDPI Graphics on Windows and Linux

• 265: Marlin Graphics Renderer

• 262: TIFF Image I/O

• 257: Update JavaFX/Media to Newer Version of GStreamer (1.4.4)

43

Page 175: What to expect from Java 9

Обзор JEP-ов. Графика• 258: HarfBuzz Font-Layout Engine

• 263: HiDPI Graphics on Windows and Linux

• 265: Marlin Graphics Renderer

• 262: TIFF Image I/O

• 257: Update JavaFX/Media to Newer Version of GStreamer (1.4.4)

• 251: Multi-Resolution Images

43

Page 176: What to expect from Java 9

Обзор JEP-ов. Производительность

44

Page 177: What to expect from Java 9

Обзор JEP-ов. Производительность

• 143: Improve Contended Locking

44

Page 178: What to expect from Java 9

Обзор JEP-ов. Производительность

• 143: Improve Contended Locking

• 266: More Concurrency Updates

44

Page 179: What to expect from Java 9

Обзор JEP-ов. Производительность

• 143: Improve Contended Locking

• 266: More Concurrency Updates

• 197: Segmented Code Cache

44

Page 180: What to expect from Java 9

Обзор JEP-ов. Производительность

• 143: Improve Contended Locking

• 266: More Concurrency Updates

• 197: Segmented Code Cache

• 165: Compiler Control

44

Page 181: What to expect from Java 9

Обзор JEP-ов. Производительность

• 143: Improve Contended Locking

• 266: More Concurrency Updates

• 197: Segmented Code Cache

• 165: Compiler Control

• 243: Java-Level JVM Compiler Interface

44

Page 182: What to expect from Java 9

Обзор JEP-ов. Производительность

• 143: Improve Contended Locking

• 266: More Concurrency Updates

• 197: Segmented Code Cache

• 165: Compiler Control

• 243: Java-Level JVM Compiler Interface

• 246: Leverage CPU Instructions for GHASH and RSA

44

Page 183: What to expect from Java 9

Обзор JEP-ов. Производительность

• 143: Improve Contended Locking

• 266: More Concurrency Updates

• 197: Segmented Code Cache

• 165: Compiler Control

• 243: Java-Level JVM Compiler Interface

• 246: Leverage CPU Instructions for GHASH and RSA

• 250: Store Interned Strings in CDS Archives

44

Page 184: What to expect from Java 9

Обзор JEP-ов. Производительность

• 143: Improve Contended Locking

• 266: More Concurrency Updates

• 197: Segmented Code Cache

• 165: Compiler Control

• 243: Java-Level JVM Compiler Interface

• 246: Leverage CPU Instructions for GHASH and RSA

• 250: Store Interned Strings in CDS Archives

• 254: Compact Strings

44

Page 185: What to expect from Java 9

Обзор JEP-ов. Безопасность

45

Page 186: What to expect from Java 9

Обзор JEP-ов. Безопасность

• 219: Datagram Transport Layer Security (DTLS)

• 229: Create PKCS12 Keystores by Default

• 244: TLS Application-Layer Protocol Negotiation Extension

• 249: OCSP Stapling for TLS

45

Page 187: What to expect from Java 9

Про Azul Systems

46

Page 188: What to expect from Java 9

Про Azul Systems• Zing: A better JVM for the enterprise

• Azul’s innovative Java runtime for business applications• Certified Java SE builds• Removes GC as a factor in your operation• Supports large in-memory data stores• Solves Java’s “warm-up” problem• Runs on distros of RHEL, Ubuntu, SLES and CentOS

46

Page 189: What to expect from Java 9

Про Azul Systems• Zing: A better JVM for the enterprise

• Azul’s innovative Java runtime for business applications• Certified Java SE builds• Removes GC as a factor in your operation• Supports large in-memory data stores• Solves Java’s “warm-up” problem• Runs on distros of RHEL, Ubuntu, SLES and CentOS

•Zulu: Java when all you need is Support • Free and Open Source (based on OpenJDK)• Certified Java SE builds• Runs on Windows, Linux & Mac• Performance parity with Oracle Hotspot• Optional customized “embedded” offerings

46

Page 190: What to expect from Java 9

47

Заключение

47

Page 191: What to expect from Java 9

Спасибо

Время вопросов и ответов

@JohnWings

48

Page 192: What to expect from Java 9

49

Backup слайды@SafeVarargs

Page 193: What to expect from Java 9

49

Backup слайды@SafeVarargs

@SafeVarargs // Not actually safe!

static void m(List<String>... stringLists) {

Object[] array = stringLists;

List<Integer> tmpList = Arrays.asList(42);

array[0] = tmpList; // Semantically invalid, but compiles without warnings

String s = stringLists[0].get(0); // Oh no, ClassCastException at runtime!

}

Page 194: What to expect from Java 9

JEP process

50

Source: http://cr.openjdk.java.net/~mr/jep/jep-2.0-02.html

Page 195: What to expect from Java 9

that’s it

51