До выхода Feature Complete версии OpenJDK 9 EA остался месяц. Самое время посмотреть, что ждет нас в следующей версии Java. Для начала рассмотрим процесс того, как идеи становятся JEP-ами, а потом становятся частью стандарта языка Java. Потом посмотрим на список из четрех десятков фич, разберем наименее тривилаьные из них на примерах: jshell, jmh, unified jvm logging и, конечно же, модулярность.
3. Зачем этот доклад?
• До выхода JDK9 меньше года
• Знать об изменениях лучше заранее
2
4. Зачем этот доклад?
• До выхода JDK9 меньше года
• Знать об изменениях лучше заранее
• Я работаю в Azul Systems - производителе JDK
• Я - сторонний заинтересованный наблюдатель развития платформы
• Вся информация из публичных источников
2
7. Переход на новую версию Java
New features!Новые возможности!
New incompatibilities!Источник ошибок и несовместимостей
3
8. Переход на новую версию Java
Изображения - Ihttps://vijaybelola.wordpress.com/2011/09/20/let-the-games-begin/ ; https://ru.wikipedia.org/wiki/Facepalm
New features!Новые возможности!
New incompatibilities!Источник ошибок и несовместимостей
3
15. Что означает наступление дня EOL?
Настал день EOL
Нужны исправления
найденных
уязвимостей
&
Подписать
Support Contract c
Oracle
5
16. Что означает наступление дня EOL?
Настал день EOL
Нужны исправления
найденных
уязвимостей
&
Подписать
Support Contract c
Oracle
Перейти на
OpenJDK (Zulu,
IcedTea, сборку
своими силами)
5
17. Что означает наступление дня EOL?
Настал день EOL
Нужны исправления
найденных
уязвимостей
&
Подписать
Support Contract c
Oracle
Перейти на
OpenJDK (Zulu,
IcedTea, сборку
своими силами)
Обновиться до
следующей
версии JDK
5
19. Вспомним новое в Java 8
• Лямбды
• Method references
• Type аннотации
• Повторяющиеся аннотации
• Интерфейсные методы
6
20. Вспомним новое в Java 8
• Лямбды
• Method references
• Type аннотации
• Повторяющиеся аннотации
• Интерфейсные методы
6
• Stream API
• Date Time API
• Замена PermGen
• Nashorn, JavaScript Engine
• Новые утилиты (jdeps,jjs,..)
41. Проблемы существующей модели
• Java Runtime большой и “тяжелый” и будет дальше расти
• Профайлы 1, 2, 3 лишь частично решают проблему
12
42. Проблемы существующей модели
• Java Runtime большой и “тяжелый” и будет дальше расти
• Профайлы 1, 2, 3 лишь частично решают проблему
• Jar / Classpath Hell
12
43. Проблемы существующей модели
• Java Runtime большой и “тяжелый” и будет дальше расти
• Профайлы 1, 2, 3 лишь частично решают проблему
• Jar / Classpath Hell
• Что от чего зависит?..
12
44. Проблемы существующей модели
• Java Runtime большой и “тяжелый” и будет дальше расти
• Профайлы 1, 2, 3 лишь частично решают проблему
• Jar / Classpath Hell
• Что от чего зависит?..
• Опциональные и транзитивные зависимости
12
45. Проблемы существующей модели
• Java Runtime большой и “тяжелый” и будет дальше расти
• Профайлы 1, 2, 3 лишь частично решают проблему
• Jar / Classpath Hell
• Что от чего зависит?..
• Опциональные и транзитивные зависимости
• Ленивая загрузка и инициализация классов -> NoClassDefFoundError
12
46. Проблемы существующей модели
• Java Runtime большой и “тяжелый” и будет дальше расти
• Профайлы 1, 2, 3 лишь частично решают проблему
• Jar / Classpath Hell
• Что от чего зависит?..
• Опциональные и транзитивные зависимости
• Ленивая загрузка и инициализация классов -> NoClassDefFoundError
• Примитивный механизм видимости для кода вне пакетов - только public
12
47. Проблемы существующей модели
• Java Runtime большой и “тяжелый” и будет дальше расти
• Профайлы 1, 2, 3 лишь частично решают проблему
• Jar / Classpath Hell
• Что от чего зависит?..
• Опциональные и транзитивные зависимости
• Ленивая загрузка и инициализация классов -> NoClassDefFoundError
• Примитивный механизм видимости для кода вне пакетов - только public
• Классы из разных загрузчиков классов “видят” друг друга
12
48. Проблемы существующей модели
• Java Runtime большой и “тяжелый” и будет дальше расти
• Профайлы 1, 2, 3 лишь частично решают проблему
• Jar / Classpath Hell
• Что от чего зависит?..
• Опциональные и транзитивные зависимости
• Ленивая загрузка и инициализация классов -> NoClassDefFoundError
• Примитивный механизм видимости для кода вне пакетов - только public
• Классы из разных загрузчиков классов “видят” друг друга
• SecurityManager помогает, но об этом надо знать
12
52. Jigsaw
JSR 376: Java Platform Module System
JEP 261: Module System
Модулярность
JDK
Модули в Java
13
53. Jigsaw
JEP 162: Prepare for Modularization
JEP 200: The Modular JDK
JEP 220: Modular Run-Time Images
JEP 201: Modular Source Code
JEP 260: Encapsulate Most Internal
APIs
JSR 376: Java Platform Module System
JEP 261: Module System
Модулярность
JDK
Модули в Java
13
58. Пример 1
src/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
73. Cосуществование cp и mp
• Всё, что попало в cp считается попавшим в безымянный (unnamed) модуль
18
74. Cосуществование cp и mp
• Всё, что попало в cp считается попавшим в безымянный (unnamed) модуль
• Безымянные модули видят все именованные модули (requires *)
18
75. Cосуществование cp и mp
• Всё, что попало в cp считается попавшим в безымянный (unnamed) модуль
• Безымянные модули видят все именованные модули (requires *)
• Обратное - неверное, надо указать requires unnamed или …
18
76. Cосуществование cp и mp
• Всё, что попало в cp считается попавшим в безымянный (unnamed) модуль
• Безымянные модули видят все именованные модули (requires *)
• Обратное - неверное, надо указать requires unnamed или …
• jar файл, который попал в mp автоматически превращается в модуль с
названием, совпадающим с названием jar-файла
18
77. Cосуществование cp и mp
• Всё, что попало в cp считается попавшим в безымянный (unnamed) модуль
• Безымянные модули видят все именованные модули (requires *)
• Обратное - неверное, надо указать requires unnamed или …
• jar файл, который попал в mp автоматически превращается в модуль с
названием, совпадающим с названием jar-файла
• автомодули становятся мостом для видимости именными модулями
классов в безымянным модуле
18
78. Cосуществование cp и mp
• Всё, что попало в cp считается попавшим в безымянный (unnamed) модуль
• Безымянные модули видят все именованные модули (requires *)
• Обратное - неверное, надо указать requires unnamed или …
• jar файл, который попал в mp автоматически превращается в модуль с
названием, совпадающим с названием jar-файла
• автомодули становятся мостом для видимости именными модулями
классов в безымянным модуле
• Типы ищутся безымянном модуле в последнюю очередь
18
87. О чем я не расскажу сегодня
23
• Reflection и модули. Новый класс java.lang.reflect.Module. Видимость и рефлекшн
88. О чем я не расскажу сегодня
23
• Reflection и модули. Новый класс java.lang.reflect.Module. Видимость и рефлекшн
• Модуляризованный jar; multirelease jar
89. О чем я не расскажу сегодня
23
• Reflection и модули. Новый класс java.lang.reflect.Module. Видимость и рефлекшн
• Модуляризованный jar; multirelease jar
• Пакеты с одинаковыми названиями и внезапные NoClassDefFoundException
90. О чем я не расскажу сегодня
23
• Reflection и модули. Новый класс java.lang.reflect.Module. Видимость и рефлекшн
• Модуляризованный jar; multirelease jar
• Пакеты с одинаковыми названиями и внезапные NoClassDefFoundException
• Layers - новая абстракция над classloaders
91. О чем я не расскажу сегодня
23
• Reflection и модули. Новый класс java.lang.reflect.Module. Видимость и рефлекшн
• Модуляризованный jar; multirelease jar
• Пакеты с одинаковыми названиями и внезапные NoClassDefFoundException
• Layers - новая абстракция над classloaders
• Инструментарий для модуляризации кода
• <java9_jigsaw>/bin/jdeps -help
• IDE скоро помогут
92. О чем я не расскажу сегодня
23
• Reflection и модули. Новый класс java.lang.reflect.Module. Видимость и рефлекшн
• Модуляризованный jar; multirelease jar
• Пакеты с одинаковыми названиями и внезапные NoClassDefFoundException
• Layers - новая абстракция над classloaders
• Инструментарий для модуляризации кода
• <java9_jigsaw>/bin/jdeps -help
• IDE скоро помогут
• Циркулярные зависимости между модулями через загрузчики модулей и как их избежать
94. (Мои) Выводы про модули в Java 9
• Цель - явное обязательное указание зависимостей
24
95. (Мои) Выводы про модули в Java 9
• Цель - явное обязательное указание зависимостей
• Пересечение с OSGi незначительное
24
96. (Мои) Выводы про модули в Java 9
• Цель - явное обязательное указание зависимостей
• Пересечение с OSGi незначительное
• Предоставляет новые возможности по оптимизации
24
97. (Мои) Выводы про модули в Java 9
• Цель - явное обязательное указание зависимостей
• Пересечение с OSGi незначительное
• Предоставляет новые возможности по оптимизации
• Сохранена совместимость с jar/cp (именные м., безымянный м., автомодули)
24
98. (Мои) Выводы про модули в Java 9
• Цель - явное обязательное указание зависимостей
• Пересечение с OSGi незначительное
• Предоставляет новые возможности по оптимизации
• Сохранена совместимость с jar/cp (именные м., безымянный м., автомодули)
• jigsaw теряет функциональность на пути к финалу
• поддержка версий была еще весной 2015, осталась лишь декларация
24
99. (Мои) Выводы про модули в Java 9
• Цель - явное обязательное указание зависимостей
• Пересечение с OSGi незначительное
• Предоставляет новые возможности по оптимизации
• Сохранена совместимость с jar/cp (именные м., безымянный м., автомодули)
• jigsaw теряет функциональность на пути к финалу
• поддержка версий была еще весной 2015, осталась лишь декларация
• IDEs учатся работать с модулями
24
102. Jigsaw - статус, ссылки
• Работа продолжается
• Статья о текущем состоянии (Сентябрь 2015)
• http://openjdk.java.net/projects/jigsaw/spec/sotms/
25
103. Jigsaw - статус, ссылки
• Работа продолжается
• Статья о текущем состоянии (Сентябрь 2015)
• http://openjdk.java.net/projects/jigsaw/spec/sotms/
• Доклады с JavaOne (октябрь 2015)
• http://openjdk.java.net/projects/jigsaw/j1/
25
104. 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
105. 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
107. JShell
• Развивается в рамках проекта Kulla
• http://openjdk.java.net/projects/kulla/
26
108. JShell
• Развивается в рамках проекта Kulla
• http://openjdk.java.net/projects/kulla/
• Интегрирован в openjdk9/dev b90
26
109. JShell
• Развивается в рамках проекта Kulla
• http://openjdk.java.net/projects/kulla/
• Интегрирован в openjdk9/dev b90
• Позволяет попробовать синтаксис без написания законченной
программы
26
110. JShell
• Развивается в рамках проекта Kulla
• http://openjdk.java.net/projects/kulla/
• Интегрирован в openjdk9/dev b90
• Позволяет попробовать синтаксис без написания законченной
программы
• Помогает обучать языку Java
26
111. JShell
• Развивается в рамках проекта Kulla
• http://openjdk.java.net/projects/kulla/
• Интегрирован в openjdk9/dev b90
• Позволяет попробовать синтаксис без написания законченной
программы
• Помогает обучать языку Java
class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
26
112. JShell
• Развивается в рамках проекта Kulla
• http://openjdk.java.net/projects/kulla/
• Интегрирован в openjdk9/dev b90
• Позволяет попробовать синтаксис без написания законченной
программы
• Помогает обучать языку Java
class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
26
120. 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
122. Garbage First включен по умолчанию
• Плюсы
• Самый современный GC в HotSpot (хоть и разрабатывается уже 10+ лет)
• Региональный параллельный одновременный коллектор
• Нацелен быть лучшим во всем - Предсказуемые паузы и высокая производительность!
• По умолчанию => Больше пользовательская база => Ошибки находятся быстрее => G1 будет доведен до ума
очень быстро
32
123. Garbage First включен по умолчанию
• Плюсы
• Самый современный GC в HotSpot (хоть и разрабатывается уже 10+ лет)
• Региональный параллельный одновременный коллектор
• Нацелен быть лучшим во всем - Предсказуемые паузы и высокая производительность!
• По умолчанию => Больше пользовательская база => Ошибки находятся быстрее => G1 будет доведен до ума
очень быстро
• Минусы
• Эргономика работает по-другому. Могут проявиться ошибки в синхронизации в вашем или библиотечном коде
32
124. Garbage First включен по умолчанию
• Плюсы
• Самый современный GC в HotSpot (хоть и разрабатывается уже 10+ лет)
• Региональный параллельный одновременный коллектор
• Нацелен быть лучшим во всем - Предсказуемые паузы и высокая производительность!
• По умолчанию => Больше пользовательская база => Ошибки находятся быстрее => G1 будет доведен до ума
очень быстро
• Минусы
• Эргономика работает по-другому. Могут проявиться ошибки в синхронизации в вашем или библиотечном коде
• Жирные минусы
• Есть несовместимости с G1 в Cassandra, Elasticsearch, Lucene, и т.п,. А вы уверены в библиотеках, которые
используете?
• Источник (датировано июлем 2015): https://groups.google.com/forum/#!topic/mechanical-sympathy/JxsuVtIIOaY
32
126. Как пережить смену default GC, не теряя сон
• Если до сих пор вас устраивали настройки GC по умолчанию
• запаситесь данными эргономики для вашего приложения и среды внедрения
• пропишите явным образом флаги настройки GC в деплоймент скриптах
33
127. Как пережить смену default GC, не теряя сон
• Если до сих пор вас устраивали настройки GC по умолчанию
• запаситесь данными эргономики для вашего приложения и среды внедрения
• пропишите явным образом флаги настройки GC в деплоймент скриптах
• Если вы и ранее явно выбирали GC и флаги GC
• Ничего не изменится, старые коллекторы не исчезнут
33
128. Как пережить смену default GC, не теряя сон
• Если до сих пор вас устраивали настройки GC по умолчанию
• запаситесь данными эргономики для вашего приложения и среды внедрения
• пропишите явным образом флаги настройки GC в деплоймент скриптах
• Если вы и ранее явно выбирали GC и флаги GC
• Ничего не изменится, старые коллекторы не исчезнут
• В обоих случаях - экспериментируйте с G1
33
129. Как пережить смену default GC, не теряя сон
• Если до сих пор вас устраивали настройки GC по умолчанию
• запаситесь данными эргономики для вашего приложения и среды внедрения
• пропишите явным образом флаги настройки GC в деплоймент скриптах
• Если вы и ранее явно выбирали GC и флаги GC
• Ничего не изменится, старые коллекторы не исчезнут
• В обоих случаях - экспериментируйте с G1
• Главное - понимать основные принципы работы GC
• Прежде всего - метрики, которыми оценивают алгоритмы GC
• Что еще почитать: http://www.infoq.com/minibooks/java-garbage-collection
33
130. Обновления языка - 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
131. Обновления языка - 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) {
}
}
132. Обновления языка - Milling Project Coin
• Использование @SafeVarargs в private методах
class VarargsFinalOnly {
@SafeVarargs void m(List<String>... args) { }
}
36
133. Обновления языка - 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
134. Обновления языка - Milling Project Coin
• Запрет на использование _ из всех имен типов, констант и т.п.
38
// key: compiler.warn.underscore.as.identifier
// options: -source 8 -Xlint:-options
class UnderscoreAsIdentifierWarning {
String _ = null;
}
136. 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
137. 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
138. 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
139. 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
140. 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
141. 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
142. 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
143. 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
144. 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
146. Обновление Process API
• JEP 102: Process API Updates
Source: http://blog.takipi.com/java-9-the-ultimate-feature-list/ 40
147. Обновление Process API
• JEP 102: Process API Updates
• Новое:
Source: http://blog.takipi.com/java-9-the-ultimate-feature-list/ 40
148. Обновление Process API
• JEP 102: Process API Updates
• Новое:
• Получить pid “своей” JVM
Source: http://blog.takipi.com/java-9-the-ultimate-feature-list/ 40
149. Обновление Process API
• JEP 102: Process API Updates
• Новое:
• Получить pid “своей” JVM
• Получить список процессов системы
Source: http://blog.takipi.com/java-9-the-ultimate-feature-list/ 40
150. Обновление Process API
• JEP 102: Process API Updates
• Новое:
• Получить pid “своей” JVM
• Получить список процессов системы
• Работа с деревьями процессов
Source: http://blog.takipi.com/java-9-the-ultimate-feature-list/ 40
151. Обновление 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
152. Обновление 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
188. Про 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
189. Про 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