70
Разговор про Java 9 Иван Крылов 1 Extended Version @JohnWings =

Разговор про Java 9. Extended version

Embed Size (px)

Citation preview

Page 1: Разговор про Java 9. Extended version

Разговор про Java 9

Иван Крылов

1

Extended Version

@JohnWings

=

Page 2: Разговор про Java 9. Extended version

Кто такой Иван Крылов2000 - Магистр Математики - “Политех”

2004 - К.т.н. - “Бонч”

1999 - 2005 Занимался оптимизацией медиакодеков для DSP

2005 - 2016 Занимаюсь JVM, Java Runtime, OpenCL native compiler, JITs, Compiler Infrastructure

2

Page 3: Разговор про Java 9. Extended version

3

Page 4: Разговор про Java 9. Extended version

Zing: Виртуальная Java-машина для крупного бизнеса

• Главная цель - улучшение показателей функционирования виртуальной Java-машины для предприятий

• Неизменная производительность - не просто быстро, а ВСЕГДА быстро• Сборка мусора больше не влияет на производительность приложений• Широчайшая сфера применения:

• от интерактивных приложений до задач, критичных ко времени отклика

• от микросервисов до приложений, требующих больших объемов памяти

• Устраняет необходимость в большинстве известных "костылей" в вашем коде

3

Page 5: Разговор про Java 9. Extended version

Zulu Embedded: Когда нужны решения для встроенных систем

• 100% открытый код - технология, основанная на OpenJDK• Сертифицирована на совместимость и соответствие Java

SE• Показатели функционирования, идентичные OpenJDK и

Oracle Java SE• Высококлассная поддержка

• Релизация для Linux x86, ARM32, ARM64, PPC32, MIPS, а также Windows и Mac OS

4

Page 6: Разговор про Java 9. Extended version

Про этот JUG• Разговор про Java 9, а не тренинг

• Это не обучение и я не топ эксперт

• Это не реклама девятки

• Нам бы пережить

• Всё может еще поменяться:

• фичи, сроки и т.п.

5

Page 7: Разговор про Java 9. Extended version

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

JDK 6Дек 2006

JDK 7Июль 2011

JDK 8Мар 2014

JDK 9план. Июль 2017

JDK 6Ноя 2012

JDK 7Апр 2015

JDK 8план. Июль 2018

J2SE 1.4 Дек 2006

JDK 5Окт 2009

6

GA

EOL

Page 8: Разговор про Java 9. Extended version

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

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

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

&

Подписать Support Contract

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

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

7

Page 9: Разговор про Java 9. Extended version

Вспомним новое в Java 8• Лямбды • Method references• Type аннотации • Повторяющиеся аннотации • Интерфейсные методы

8

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

Page 10: Разговор про Java 9. Extended version

Java 9 and community

9

Page 11: Разговор про Java 9. Extended version

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

JEP предложен

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

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

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

Page 12: Разговор про Java 9. Extended version

Путь JSR

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

Page 13: Разговор про Java 9. Extended version

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

atur

e co

mpl

ete

Zero

Bug

Bou

nce

Ram

pdow

n ph

ase

2Fin

al Re

lease

Can

dida

te

Май

’16

Ram

pdow

n St

art

All T

ests

Run

Gene

ral A

vaila

bility

Янв ’

17

Фев

’17

Фев

’17

Март ’

17

Июль

’17

27 Июля

’17

12

Ext.

Feat

ure

com

plet

e

Дек

’16

Page 14: Разговор про Java 9. Extended version

Модули

13

Page 15: Разговор про Java 9. Extended version

Модули

Пакеты

Классы

Поля & Методы

Интерфейсы

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

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

14

Page 16: Разговор про Java 9. Extended version

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

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

• Jar / Classpath Hell

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

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

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

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

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

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

Page 17: Разговор про Java 9. Extended version

16

Page 18: Разговор про Java 9. Extended version

Wikepedia о Jar-hell

• Accidental presence of two different versions of a library installed on a system. This will not be considered an error by the system. Rather, the system will load classes from one or the other library. Adding the new library to the list of available libraries instead of replacing it may result in the application still behaving as though the old library is in use, which it may well be.

• Multiple libraries or applications require different versions of library foo. If versions of library foo use the same class names, there is no way to load the versions of library foo with the same classloader.

• The most complex JAR hell problems arise in circumstances that take advantage of the full complexity of the classloading system. A Java program is not required to use only a single "flat" classloader, but instead may be composed of several (potentially very many) nested, cooperating classloaders. Classes loaded by different classloaders may interact in complex ways not fully comprehended by a developer, leading to errors or bugs that are difficult to analyze, explain, and resolve.

17

Page 19: Разговор про Java 9. Extended version

Примеры

18

• 01 - Classpath hell

• 02 - Простейшее модульное приложение• 03 - jimage

• 04 - Ошибка “2 модуля экспортируют один пакет в модуль 3”

• 05 - Работа с двумя “одинаковыми” классами в разных модулях через рефлекшн

Page 20: Разговор про Java 9. Extended version

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

19

Page 21: Разговор про Java 9. Extended version

Пример 1

src/com.azul.modules.module1/module-info.java

module com.azul.modules.module1 { exports com.azul.testpackage1; }

src/com.azul.modules.module2/module-info.java

module com.azul.modules.module2 {

requires com.azul.modules.module1;

}

com.azul.modules.module1/com/azul/testpackage1/A.java

package com.azul.testpackage1;public class A { public static void m() { System.out.println("-- I am in path1.com.azul.test.A.m() "); }}

com.azul.modules.module2/com/azul/testpackage2/A.java

package com.azul.testpackage2;

public class A { public static void main(String[] args) { System.out.println("Calling from com.azul.modules.module2.com.azul.testpackage2.A.m() "); com.azul.testpackage1.A.m(); }}

1 220

Page 22: Разговор про Java 9. Extended version

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

• $cd/src

• $J/javac —-module-source-path . -d target $(find com.azul.modules.module1 -name “*.java")

• $J/javac —-module-path target -d target//com.azul.modules.module2 $(find com.azul.modules.module2 -name “*.java”)

• # Запуск

• $J/java -p target -m mlib/com.azul.modules.module2

21

Page 23: Разговор про Java 9. Extended version

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

22

• # Упаковка

• $J/jar --create --file=mlib/module2.jar --main-class=com.azul.testpackage2.A -C target/com.azul.modules.module2 .

• # Запуск

• $J/java -p target -m com.azul.modules.module2

Page 24: Разговор про Java 9. Extended version

Пример 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

23

Page 25: Разговор про Java 9. Extended version

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

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

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

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

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

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

Page 26: Разговор про Java 9. Extended version

Безымянные модули имеют доступ к (почти) всем именованным

• Кроме следующих модулей:java.activation - java.annotations.common - java.corba - java.transaction - java.xml.bind java.xml.ws

• Можно поправить, добавив флаг -addmods java.corba`

• Подробнее : см. письмо Алана Бейтманаhttp://mail.openjdk.java.net/pipermail/jdk9-dev/2016-May/004309.html

• Спека: http://openjdk.java.net/jeps/26125

Page 27: Разговор про Java 9. Extended version

Виды модулей• Именованные

• Для которых есть module-info.class

• Автоматические

• jar файлы в module path

• Безымянные

• Классы в “классическом” classpath

26

Page 28: Разговор про Java 9. Extended version

28

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 29: Разговор про Java 9. Extended version

29

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 30: Разговор про Java 9. Extended version

30

java —add-exports

java --add-exports :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, :

(*в более ранних версиях -Xadd-Exports)

Page 31: Разговор про Java 9. Extended version

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

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

JDK 7 b65

31

Page 32: Разговор про Java 9. Extended version

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

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

JDK 8 b48

31

Page 33: Разговор про Java 9. Extended version

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

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

JDK9 EA

31

Page 34: Разговор про Java 9. Extended version

А получили ли то, что хотели?

32

Page 35: Разговор про Java 9. Extended version

33

Page 36: Разговор про Java 9. Extended version

33

• Reflection is disallowed from operating on non-exported types, even with the use of setAccessible

• Jigsaw has only limited support for the dynamic introduction and alteration of modules

• Restrictions that make interoperability with alternative modular systems difficult.

• Source: http://wildfly.org/news/2016/12/12/Jigsaws-Missing-Pieces

Есть мнение, что это fail

Page 37: Разговор про Java 9. Extended version

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

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

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

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

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

• OSGi и EE Комьюнити волнуются

• IDEs EA builds работают с модулями, сложнее с dependency managers34

Page 38: Разговор про Java 9. Extended version

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

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

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

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

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

• Код давно залит в основной репозиторий (С января 2016)

• hg.openjdk.java.net/jdk9/jdk9

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

Page 39: Разговор про Java 9. Extended version

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

36

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.}

Page 40: Разговор про Java 9. Extended version

Обновления языка - Milling Project Coin• Effectively-final переменные могут использоваться в try-with-

resources выражениях

37

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

public static void main(String... args) { FileReader f = new FileReader(“test.txt");

try (br = new BufferedReader(fr)) { // do something } catch (Exception ex) { } }

Page 41: Разговор про Java 9. Extended version

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

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

38

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

Page 42: Разговор про Java 9. Extended version

В Java 8./TypeInferrenceTest.java:7: error: cannot infer type arguments for HashMap<K,V> new HashMap<>() ^ reason: cannot use '<>' with anonymous inner classes where K,V are type-variables: K extends Object declared in class HashMap V extends Object declared in class HashMap 1 error

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

39

public class TypeInferrenceTest { Map<String, String> map = new HashMap<> () { { map.put("key", "value"); } }; }

Page 43: Разговор про Java 9. Extended version

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

40

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

class UnderscoreAsIdentifierWarning { String _ = null;}

Page 44: Разговор про Java 9. Extended version

Другие обновления языкаНадоело писать имя типа в декларации переменной?

41

var list = new ArrayList<String>();

Local-Variable Type Inference.

Это JEP-286. Пока что только “кандидат”

var result = processNewCustomerAdded();

Page 45: Разговор про Java 9. Extended version

Фабричные методы для коллекцийСоздание неизменных контейнеров

42

Set<String> set = new HashSet<>(); set.add("a"); set.add("b"); set = Collections.unmodifiableSet(set);

Set<String> set = Collections.unmodifiableSet( new HashSet<>(Arrays.asList("a", "b")));

Set<String> set = Collections.unmodifiableSet( new HashSet<String>() {{ add("a"); add("b"); }});

Set<String> set = Collections.unmodifiableSet( Stream.of("a", “b").collect(toSet()));

Set<String> set = Set.of("a", "b");

Page 46: Разговор про Java 9. Extended version

Фабричные методы для коллекций

43

• Set.of(a, b);

• List.of(a, b);

• Map.of(k1, v1);

• Map.of(k1, v1, k2, v2);

• Map.of(k1, v1, k2, v2, k3, v3);

• Map.ofEntries(entry(k1, v1), entry(k2, v2), ….. entry (kn, vn));

Page 47: Разговор про Java 9. Extended version

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

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

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

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

44

Page 48: Разговор про Java 9. Extended version

Kulla…

45

Page 49: Разговор про Java 9. Extended version

Кулла?

46

Page 50: Разговор про Java 9. Extended version

Kulla?

47

Page 51: Разговор про Java 9. Extended version

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

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

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

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

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

• Минусы

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

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

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

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

50

Page 52: Разговор про Java 9. Extended version

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

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

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

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

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

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

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

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

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

Page 53: Разговор про Java 9. Extended version

Другие изменения в GC

• Deprecate CMS

• Deprecate - значит запретить, но в будущем (после 9ки)

• Создание GC интерфейса

• https://bugs.openjdk.java.net/browse/JDK-8163329

• Shenandoah GC (JEP-189)

• Первый OpenJDK GC не от Оракла

52

Page 54: Разговор про Java 9. Extended version

Currency API• Не войдет в Java 9, развивается отдельно

• прошлых конференция я говорил не так

• Поговорим, если останется время - см. backup slides

53

Page 55: Разговор про Java 9. Extended version

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

• Новое:

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

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

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

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

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());

Page 56: Разговор про Java 9. Extended version

55

Унификация JVM логгинга• Унификация по всем подсистемам jvm• 6 уровней + тэги • Вывод в stdout / stderr / файл / зацикленный файл • Побороли проблему некорректного вывода логов• -Xlog:help• 11 декораторов

-Xlog:classinit -Xlog:classloaderdata -Xlog:defaultmethods -Xlog:itables -Xlog:monitormismatch -Xlog:safepoint -Xlog:startuptime -Xlog:vmoperation -Xlog:vtables -Xlog:verification

-XX:+TraceClassInitialization -XX:+TraceClassLoaderData -XX:+TraceDefaultMethods -XX:+TraceItables -XX:+TraceMonitorMismatch -XX:+TraceSafepoint -XX:+TraceStartupTime -XX:+TraceVMOperation -XX:+PrintVtables -XX:+VerboseVerification

java -Xlog:help

Page 57: Разговор про Java 9. Extended version

HTTP/2 сегодня

56

Page 58: Разговор про Java 9. Extended version

(HTTP/2) ISO 7-Layer Reference Model Layer 7: Application - Specifies how a particular application uses a network

Layer 6: Presentation - Specifies how to represent data

Layer 5: Session - Specifies how to establish communication with a remote system

Layer 4: Transport - Specifies how to reliably handle data transfer

Layer 3: Network - Specifies addressing assignments and how packets are forwarded

Layer 2: Data Link - Specifies the organization of data into frames and how to send frames over a network

Layer 1: Physical - Specifies the basic network hardware

57

Page 59: Разговор про Java 9. Extended version

(HTTP/2) ISO 7-Layer Reference Model Layer 7: Application - Specifies how a particular application uses a network

Layer 6: Presentation - Specifies how to represent data

Layer 5: Session - Specifies how to establish communication with a remote system

Layer 4: Transport - Specifies how to reliably handle data transfer

Layer 3: Network - Specifies addressing assignments and how packets are forwarded

Layer 2: Data Link - Specifies the organization of data into frames and how to send frames over a network

Layer 1: Physical - Specifies the basic network hardware

57

Page 60: Разговор про Java 9. Extended version

HTTP -> TCP

58

• HTTP 0.9: The One-Line Protocol (1989)

• HTTP/1.0 (1996)

• HTTP/1.1: Internet Standard (1997)

• Keep alive; chunk encodings; byte-range requests, additional caching mechanisms, transfer encodings, and request pipelining

• HTTP/2.0 (since 2012)

Ref: https://hpbn.co/brief-history-of-http/

Page 61: Разговор про Java 9. Extended version

59https://speakerdeck.com/vietj/2-2

HTTP/2. Multiplexing

Page 62: Разговор про Java 9. Extended version

Unicode в Java 9

• 227: Unicode 7.0…

• … & 267: Unicode 8.0

60

Page 63: Разговор про Java 9. Extended version

Обзор 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

61

Page 64: Разговор про Java 9. Extended version

Stack walking API• Было: Throwable::getStackTrace и Thread::getStackTrace

StackTraceElement[] stack = Thread.currentThread().getStackTrace();

• Стало:

StackFrame[] stack =new StackWalker().walk((s) -> s.collect(Collectors.toArray()));

• Новый класс StackWalker

62

Page 65: Разговор про Java 9. Extended version

63

HotSpot в Java 9

63

Page 66: Разговор про Java 9. Extended version

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

• 143: Improve Contended Locking

• 266: More Concurrency Updates

• 197: Segmented Code Cache

• 165: Compiler Control

• 295: Ahead-of-Time Compilation

• 243: Java-Level JVM Compiler Interface

• 246: Leverage CPU Instructions for GHASH and RSA

• 250: Store Interned Strings in CDS Archives

• 254: Compact Strings

• 280: Indify String Concatenation

64

Page 67: Разговор про Java 9. Extended version

Обзор 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

65

Page 68: Разговор про Java 9. Extended version

Обзор 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

66

Page 69: Разговор про Java 9. Extended version

Спасибо

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

@JohnWings

67

Page 70: Разговор про Java 9. Extended version

JEP process

70

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