Разговор про Java 9. Extended version
-
Upload
ivan-krylov -
Category
Engineering
-
view
881 -
download
3
Transcript of Разговор про Java 9. Extended version
![Page 1: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/1.jpg)
Разговор про Java 9
Иван Крылов
1
Extended Version
@JohnWings
=
![Page 2: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/2.jpg)
Кто такой Иван Крылов2000 - Магистр Математики - “Политех”
2004 - К.т.н. - “Бонч”
1999 - 2005 Занимался оптимизацией медиакодеков для DSP
2005 - 2016 Занимаюсь JVM, Java Runtime, OpenCL native compiler, JITs, Compiler Infrastructure
2
![Page 3: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/3.jpg)
3
![Page 4: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/4.jpg)
Zing: Виртуальная Java-машина для крупного бизнеса
• Главная цель - улучшение показателей функционирования виртуальной Java-машины для предприятий
• Неизменная производительность - не просто быстро, а ВСЕГДА быстро• Сборка мусора больше не влияет на производительность приложений• Широчайшая сфера применения:
• от интерактивных приложений до задач, критичных ко времени отклика
• от микросервисов до приложений, требующих больших объемов памяти
• Устраняет необходимость в большинстве известных "костылей" в вашем коде
3
![Page 5: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/5.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/6.jpg)
Про этот JUG• Разговор про Java 9, а не тренинг
• Это не обучение и я не топ эксперт
• Это не реклама девятки
• Нам бы пережить
• Всё может еще поменяться:
• фичи, сроки и т.п.
5
![Page 7: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/7.jpg)
Временные интервалы выхода версий 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](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/8.jpg)
Что означает наступление дня EOL?
Настал день EOLНужны исправления
найденных уязвимостей
&
Подписать Support Contract
Перейти на OpenJDK (Zulu, IcedTea, сборку своими силами)
Обновиться до следующей версии JDK
7
![Page 9: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/9.jpg)
Вспомним новое в Java 8• Лямбды • Method references• Type аннотации • Повторяющиеся аннотации • Интерфейсные методы
8
• Stream API• Date Time API• Замена PermGen• Nashorn, JavaScript Engine• Новые утилиты (jdeps,jjs,..)
![Page 10: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/10.jpg)
Java 9 and community
9
![Page 11: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/11.jpg)
От идей до нового функционала Java
JEP предложен
JEP принят, найден “спонсор”
JEP подтвержден для Java версии N
JEP реализован10
![Page 12: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/12.jpg)
Путь JSR
Source: https://groups.google.com/forum/#!topic/java-social/InafCPMLLaA11
![Page 13: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/13.jpg)
Ориентировочное расписание выхода 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](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/14.jpg)
Модули
13
![Page 15: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/15.jpg)
Модули
Пакеты
Классы
Поля & Методы
Интерфейсы
…
Абстрактные Классы
…
Инкапсуляция кода
14
![Page 16: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/16.jpg)
Проблемы существующей модели• Java Runtime большой и “тяжелый” и будет дальше расти
• Профайлы 1, 2, 3 лишь частично решают проблему
• Jar / Classpath Hell
• Что от чего зависит?..
• Опциональные и транзитивные зависимости
• Ленивая загрузка и инициализация классов -> NoClassDefFoundError
• Примитивный механизм видимости для кода вне пакетов - только public
• Классы из разных загрузчиков классов “видят” друг друга
• SecurityManager помогает, но об этом надо знать15
![Page 17: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/17.jpg)
16
![Page 18: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/18.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/19.jpg)
Примеры
18
• 01 - Classpath hell
• 02 - Простейшее модульное приложение• 03 - jimage
• 04 - Ошибка “2 модуля экспортируют один пакет в модуль 3”
• 05 - Работа с двумя “одинаковыми” классами в разных модулях через рефлекшн
![Page 20: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/20.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/21.jpg)
Пример 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](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/22.jpg)
Новые параметры 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](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/23.jpg)
Новые параметры 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](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/24.jpg)
Пример 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](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/25.jpg)
Cосуществование cp и mp• Всё, что попало в cp считается попавшим в безымянный (unnamed) модуль
• Безымянные модули видят все именованные модули (requires *)
• Обратное - неверное, надо указать requires unnamed или …
• jar файл, который попал в mp автоматически превращается в модуль с названием, совпадающим с названием jar-файла
• автомодули становятся мостом для видимости именными модулями классов в безымянным модуле
• Типы ищутся безымянном модуле в последнюю очередь 24
![Page 26: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/26.jpg)
Безымянные модули имеют доступ к (почти) всем именованным
• Кроме следующих модулей: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](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/27.jpg)
Виды модулей• Именованные
• Для которых есть module-info.class
• Автоматические
• jar файлы в module path
• Безымянные
• Классы в “классическом” classpath
26
![Page 28: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/28.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/29.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/30.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/31.jpg)
Модулярность
Source: http://openjdk.java.net/projects/jigsaw/doc/jdk-modularization.html
JDK 7 b65
31
![Page 32: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/32.jpg)
Модулярность
Source: http://openjdk.java.net/projects/jigsaw/doc/jdk-modularization.html
JDK 8 b48
31
![Page 33: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/33.jpg)
Модулярность
Source: http://openjdk.java.net/projects/jigsaw/doc/jdk-modularization.html
JDK9 EA
31
![Page 34: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/34.jpg)
А получили ли то, что хотели?
32
![Page 35: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/35.jpg)
33
![Page 36: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/36.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/37.jpg)
(Мои) Выводы про модули в Java 9• Цель - явное обязательное указание зависимостей
• Предоставляет новые возможности по оптимизации
• Сохранена совместимость с jar/cp (именные м., безымянный м., автомодули)
• jigsaw теряет функциональность на пути к финалу
• поддержка версий была еще весной 2015, осталась лишь декларация
• OSGi и EE Комьюнити волнуются
• IDEs EA builds работают с модулями, сложнее с dependency managers34
![Page 38: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/38.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/39.jpg)
Обновления языка - 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](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/40.jpg)
Обновления языка - 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](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/41.jpg)
Обновления языка - Milling Project Coin
• Использование @SafeVarargs в private методах
38
class VarargsFinalOnly { @SafeVarargs void m(List<String>... args) { }}
![Page 42: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/42.jpg)
В 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](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/43.jpg)
Обновления языка - 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](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/44.jpg)
Другие обновления языкаНадоело писать имя типа в декларации переменной?
41
var list = new ArrayList<String>();
Local-Variable Type Inference.
Это JEP-286. Пока что только “кандидат”
var result = processNewCustomerAdded();
![Page 45: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/45.jpg)
Фабричные методы для коллекцийСоздание неизменных контейнеров
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](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/46.jpg)
Фабричные методы для коллекций
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](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/47.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/48.jpg)
Kulla…
45
![Page 49: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/49.jpg)
Кулла?
46
![Page 50: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/50.jpg)
Kulla?
47
![Page 51: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/51.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/52.jpg)
Как пережить смену default GC, не теряя сон• Если до сих пор вас устраивали настройки GC по умолчанию
• запаситесь данными эргономики для вашего приложения и среды внедрения
• пропишите явным образом флаги настройки GC в деплоймент скриптах
• Если вы и ранее явно выбирали GC и флаги GC
• Ничего не изменится, старые коллекторы не исчезнут
• В обоих случаях - экспериментируйте с G1
• Главное - понимать основные принципы работы GC
• Прежде всего - метрики, которыми оценивают алгоритмы GC
• Что еще почитать: http://www.infoq.com/minibooks/java-garbage-collection51
![Page 53: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/53.jpg)
Другие изменения в 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](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/54.jpg)
Currency API• Не войдет в Java 9, развивается отдельно
• прошлых конференция я говорил не так
• Поговорим, если останется время - см. backup slides
53
![Page 55: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/55.jpg)
Обновление 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](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/56.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/57.jpg)
HTTP/2 сегодня
56
![Page 58: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/58.jpg)
(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](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/59.jpg)
(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](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/60.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/61.jpg)
59https://speakerdeck.com/vietj/2-2
HTTP/2. Multiplexing
![Page 62: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/62.jpg)
Unicode в Java 9
• 227: Unicode 7.0…
• … & 267: Unicode 8.0
60
![Page 63: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/63.jpg)
Обзор 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](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/64.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/65.jpg)
63
HotSpot в Java 9
63
![Page 66: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/66.jpg)
Обзор 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](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/67.jpg)
Обзор 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](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/68.jpg)
Обзор 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](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/69.jpg)
Спасибо
Время вопросов и ответов
@JohnWings
67
![Page 70: Разговор про Java 9. Extended version](https://reader033.fdocuments.net/reader033/viewer/2022051318/5899fb1e1a28abc5778b6091/html5/thumbnails/70.jpg)
JEP process
70
Source: http://cr.openjdk.java.net/~mr/jep/jep-2.0-02.html