SlideShare una empresa de Scribd logo
1 de 28
Java 9
Ставила Леонид
март, 2017
кратко о новомкратко о новом
●
Модульная система - проект Jigsaw
●
Интерпретатор Jshell
●
Ahead-of-Time компиляция
●
Реактивные стримы
●
Усовершенствования Process API
●
Images API - картинки с несколькими размерами
●
Фабричные методы коллекций
●
Клиент HTTP 2
●
Тесная интеграция с рабочим столом
●
И многое другое
Java 9: июль 2017
●
Самое важное новшество в Java 9
●
Планировалась ещё в Java 7
●
Реализация длилась около 10 лет
●
Все библиотеки сгруппированы в модули
●
Используются только необходимые
●
Ещё один уровень инкапсуляции — публичные
классы видны, если это разрешено в модуле
Модульная система
проект Jigsaw
Разработчики Java постарались на славу,
максимально отвязав классы от сторонних
зависимостей:
●
Все модули: 137 Мб
●
JavaFX: 30 Мб
●
XML: 10 Мб
●
java.base: 19 Мб
Jigsaw: цифры
●
Некоторые библиотеки, например com.sun.* не
будут доступны по умолчанию.
●
Введение модульности повлечёт за собой
внесение изменений в предыдущий код.
●
Усложнена система видимостей - теперь помимо
классов и пакетов есть ещё и модули.
Неудобства,
недостатки
Консоль, в которой можно объявлять
переменные, писать выражения, выполнять
команды и тут же получать результат.
●
Дружелюбный для начинающих
●
Удобный для разработчиков
●
Автоматическое дополнение по клавише tab
●
Сохранение/загрузка команд
●
Не нужно ставить «;»
JShell – интерпретатор Java 9
Было: для проверки фрагмента кода создавался
класс с методом main, или тестовый класс.
●
Для начинающих это шок - много непонятного
кода чтобы вывести на экран "Hello World!".
●
Если громоздкое приложение - Spring, Hibernate,
в добавок, код на JS - проверять кусочек кода
очень дорого, подчас, минута-две и более
ожидания, пока всё поднимется.
JShell
●
Компиляция непосредственно в машинный код
●
Исполняемому файлу не нужны JRE, JDK
●
Скорость выполнения близка к Си
●
Невозможность декомпиляции
Ahead-of-Time компиляция
Сравнение
с приложением на Си
Утилита jaotc очень тщательно анализирует
исходники (что невозможно при JIT компиляции) и
переводит их в машинный код.
Даже при AoT программа, написанная на Java
будет работать хоть немножко, на какие-то доли
процента, но медленнее чем аналогичная
программа на Си. Причина - безопасность типов,
проверки массивов на переполнение и прочие
вещи, которые в Си могут запросто завалить не
только работающее приложение, но и всю
систему.
Сейчас гарантируется только покрытие модуля
java.base, то есть, объектов, потоков и структур
данных. И то, только для 64-битных систем Linux.
Вопрос создания таким образом даже оконного
приложения под большим вопросом.
Решение идеально для встраиваемых и
мобильных систем, поскольку, динамическая
компиляция потребляет ресурсы процессора и
аккумулятора. В iOS запрещена динамическая
загрузка кода, на Java было невозможно писать
программы под телефоны от Apple.
Асинхронная обработка потоков данных.
Интерфейсы java.util.concurrent.Flow:
Flow.Processor<T,R>
Flow.Publisher<T>
Flow.Subscriber<T>
Flow.Subscription
Издатель производит данные, потребляемые
несколькими подписчиками. Подписки
связывают издателей и подписчиков.
Перспектива использования в распределённых
приложениях очень реальная.
Reactive Streams API
Publish Subscribe Framework
Информацию о процессе доступна с помощью
java.lang.ProcessHandle:
●
pid
●
вся информация
●
команда запуска
●
время запуска
●
суммарное процессорное время
●
имя пользователя
Так же можно уничтожать процессы. Имеется
возможность повесить событие, которое будет
происходить после завершения процесса:
ProcessHandle.onExit().
Process API
Интерфейс
java.awt.image.MultiResolutionImage хранит
картинки с несколькими размерами. Возвращает
весь список картинок, или, зная габариты,
подбирает наиболее подходящую.
Применение: поддержка графики на различных
мониторах. В зависимости от разрешения
экрана и размера окна класс
java.awt.Graphics будет получать нужный
вариант картинки.
Картинки с несколькими
размерами в Images API
Java 8: неизменяемые коллекции:
Map<String, String> immutableMap =
Collections.unmodifiableMap(
new HashMap<String, String>() {{
put("key1", "Value1");
put("key2", "Value2");
put("key3", "Value3");
}});
Java 9:
List<String> immutableList = List.of("one", "two");
Set<String> iSet = Set.of("value1", "value2");
Map<String, String> iMap =
Map.of("key1", "Value1", "key2", "Value2");
Фабричные методы коллекций
Доработка интерфейсов была начата ещё в
Java 8. Были добавлены статические
методы и методы по умолчанию. Теперь
есть ещё и приватные методы.
Повышают чистоту и ясность кода.
Статические приватные классы доступны
только в пределах интерфейса, обычные
же можно вызывать из экземпляра
интерфейса.
Private методы в интерфейсах
Команда try-с-ресурсами была введена в Java 7.
В этом блоке объявляется переменная, и о её
закрытии и освобождении ресурсов можно не
беспокоиться, всё произойдёт автоматически.
Такая запись была громоздкой:
void printFileJava7() throws IOException {
try (FileInputStream myInput = new
FileInputStream("myfile.txt")) {
int data = myInput.read();
while(data != -1){
System.out.print((char) data);
data = myInput.read();
}
}
}
Try-с-ресурсами
В Java 9 такую переменную можно объявить за
пределами блока try, главное, чтобы она была
финальной, или вела себя как финальная.
void printFileJava9() throws IOException {
final FileInputStream myInput = new
FileInputStream("myfile.txt")
try (myInput) {
int data = myInput.read();
while(data != -1){
System.out.print((char) data);
data = myInput.read();
}
}
}
Try-с-ресурсами
Diamond operator упрощает запись
параметризованных данных.
List<String> preJava7 = new ArrayList<String>();
List<String> java7 = new ArrayList<>();
Повышается читабельность кода, но такая запись
не работала с анонимными классами. Теперь и
это в прошлом:
List<String> list = new ArrayList<>(){ ... };
Улучшения для алмазного
оператора
Аннотация @Deprecated используется для
пометок в Java API устаревшего или
неверно работающего кода.
Теперь у аннотации @Deprecated есть
свойства forRemoval и since.
Улучшение аннотации
Deprecated
Новый HTTP API с поддержкой HTTP/2 веб-сокетов. Замена
устаревшему API HTTPURLConnection. Ещё не завершён, доступен в
специальном модуле, который по умолчанию недоступен. Пример:
создание HTTP-запроса и асинхронное получение ответа:
URI testPageURI = new URI("http://127.0.0.1:8080/testPage");
CompletableFuture<HttpResponse> nonBlockingResponse = HttpRequest
.create(testPageURI)
.GET().responseAsync();
int tries = 0;
while (!nonBlockingResponse.isDone() && tries++ < 5)
{ Thread.sleep(5); }
if (nonBlockingResponse.isDone()) {
HttpResponse response = nonBlockingResponse.get();
System.out.println("status code : " + response.statusCode()
+ " --> " + response.body(HttpResponse.asString()));
} else {
nonBlockingResponse.cancel(true);
System.out.println("Cancelling, could not get response");
}
Клиент HTTP 2
Desktop приложения Java выделялись своей топорностью.
Максимум - можно управлять размером окна. Для JavaFX даже
иконку приложения нельзя указать! У современных систем: иконки
в трее, панели, перетаскивание, какие-то свои меню и прочее.
Класс java.awt.Desktop раздвигает границы возможностей.
Например, можно реагировать на блокировку экрана,
переключение пользователей, завершение работы системы.
Улучшена работа с панелью задач, иконками, панелями, и т.д.
Например, мигание иконки, если надо привлечь внимание, или
подпрыгивание иконки в докере, или своё меню, индикатор
завершения.
Естественно, все эти радости сильно зависят от системы. В
данный момент, лучше всего дела обстоят с OS X и Windows.
Нативная интеграция
с рабочим столом
●
Applet API устарел
●
Плагин Java для браузера умер
●
javac больше не поддерживает исходный код
Java 1.4 и старше.
Прощание с усопшими
●
Больше нельзя называть переменные символом
подчёркивания. Он зарезервирован.
●
Методы в Optional, такие как конвертер в Stream и or
●
Аннотация SafeVarrargs для приватных методов
●
Поддержка TIFF, экранов высокого разрешения,
улучшения в Java 2D
●
Сжатые строки
●
UTF-8 в файлах свойств
●
Нескольких версий в одном JAR файле
●
Улучшена поддержка ECMAScript 6.
●
Ограничения памяти для контейнеров, таких как Docker
●
Unicode 8.0
Другие изменения, дополнения
●
Унифицированное логирование в JVM
●
Stack-Walking API – работа со stack traces.
●
Поиск по документации Java
●
Генерация JavaDoc в формате HTML 5
Документация и логирование
●
JSON API
●
Вывод типов локальных переменных (var)
Возможно, мы их увидим в Java 10
В Java 9 не вошли
http://programtalk.com/java/java-9-new-features/
http://openjdk.java.net/projects/jigsaw/quick-start
http://download.java.net/java/jdk9/docs/api/overview-su
https://habrahabr.ru/company/piter/blog/271941/
https://habrahabr.ru/company/piter/blog/272861/
https://tproger.ru/news/jaotc-wtf/
Ссылки, источники

Más contenido relacionado

La actualidad más candente

Java Core. Lecture# 1. Intro
Java Core. Lecture# 1. IntroJava Core. Lecture# 1. Intro
Java Core. Lecture# 1. IntroAnton Moiseenko
 
Клиентская Java вне браузера. Делаем нативные клиенты на Java
Клиентская Java вне браузера. Делаем нативные клиенты на JavaКлиентская Java вне браузера. Делаем нативные клиенты на Java
Клиентская Java вне браузера. Делаем нативные клиенты на JavaNikita Lipsky
 
C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.Igor Shkulipa
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.Igor Shkulipa
 
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел КрынецкийJSC “Arcadia Inc”
 
курс Java 2016. занятие 03. интерфейсы, generic, исключения
курс Java 2016. занятие 03. интерфейсы, generic, исключениякурс Java 2016. занятие 03. интерфейсы, generic, исключения
курс Java 2016. занятие 03. интерфейсы, generic, исключения7bits
 
C:\fakepath\lopc_midlet
C:\fakepath\lopc_midletC:\fakepath\lopc_midlet
C:\fakepath\lopc_midletstaticboy44
 
C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.Igor Shkulipa
 
Java core-lect6-part3-annotation.ppt
Java core-lect6-part3-annotation.pptJava core-lect6-part3-annotation.ppt
Java core-lect6-part3-annotation.pptAnton Moiseenko
 
Зачем нужна Scala?
Зачем нужна Scala?Зачем нужна Scala?
Зачем нужна Scala?Vasil Remeniuk
 
JVM: краткий курс общей анатомии
JVM: краткий курс общей анатомииJVM: краткий курс общей анатомии
JVM: краткий курс общей анатомииNikita Lipsky
 
Frontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковFrontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковCodeFest
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyRegn
 
Java осень 2014 занятие 1
Java осень 2014 занятие 1Java осень 2014 занятие 1
Java осень 2014 занятие 1Technopark
 
C++ STL & Qt. Занятие 04.
C++ STL & Qt. Занятие 04.C++ STL & Qt. Занятие 04.
C++ STL & Qt. Занятие 04.Igor Shkulipa
 
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 днейГотовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 днейSkillFactory
 
Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.Anton Moiseenko
 

La actualidad más candente (20)

Java Core. Lecture# 1. Intro
Java Core. Lecture# 1. IntroJava Core. Lecture# 1. Intro
Java Core. Lecture# 1. Intro
 
Клиентская Java вне браузера. Делаем нативные клиенты на Java
Клиентская Java вне браузера. Делаем нативные клиенты на JavaКлиентская Java вне браузера. Делаем нативные клиенты на Java
Клиентская Java вне браузера. Делаем нативные клиенты на Java
 
C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.
 
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
 
курс Java 2016. занятие 03. интерфейсы, generic, исключения
курс Java 2016. занятие 03. интерфейсы, generic, исключениякурс Java 2016. занятие 03. интерфейсы, generic, исключения
курс Java 2016. занятие 03. интерфейсы, generic, исключения
 
Spring AOP
Spring AOPSpring AOP
Spring AOP
 
C:\fakepath\lopc_midlet
C:\fakepath\lopc_midletC:\fakepath\lopc_midlet
C:\fakepath\lopc_midlet
 
C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.
 
Lesson 01
Lesson 01Lesson 01
Lesson 01
 
Java core-lect6-part3-annotation.ppt
Java core-lect6-part3-annotation.pptJava core-lect6-part3-annotation.ppt
Java core-lect6-part3-annotation.ppt
 
Зачем нужна Scala?
Зачем нужна Scala?Зачем нужна Scala?
Зачем нужна Scala?
 
JVM: краткий курс общей анатомии
JVM: краткий курс общей анатомииJVM: краткий курс общей анатомии
JVM: краткий курс общей анатомии
 
Frontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковFrontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиков
 
Система обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на GroovyСистема обработки бизнес-логики server-side приложения на Groovy
Система обработки бизнес-логики server-side приложения на Groovy
 
Deep storm presentation
Deep storm presentationDeep storm presentation
Deep storm presentation
 
Java осень 2014 занятие 1
Java осень 2014 занятие 1Java осень 2014 занятие 1
Java осень 2014 занятие 1
 
C++ STL & Qt. Занятие 04.
C++ STL & Qt. Занятие 04.C++ STL & Qt. Занятие 04.
C++ STL & Qt. Занятие 04.
 
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 днейГотовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 дней
 
Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.Java Core. Lecture# 2. Classes & objects.
Java Core. Lecture# 2. Classes & objects.
 

Similar a Java 9 - кратко о новом

IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаMikhail Chinkov
 
Dz Java Hi Load 0.4
Dz Java Hi Load 0.4Dz Java Hi Load 0.4
Dz Java Hi Load 0.4HighLoad2009
 
Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...jazzteam
 
Java 9: what is there beyond modularization
Java 9: what is there beyond modularizationJava 9: what is there beyond modularization
Java 9: what is there beyond modularizationIvan Krylov
 
Разговор про Java 9. Extended version
Разговор про Java 9. Extended versionРазговор про Java 9. Extended version
Разговор про Java 9. Extended versionIvan Krylov
 
Ввведение в java
Ввведение в javaВвведение в java
Ввведение в javaUnguryan Vitaliy
 
Введение в язык программирования «Java»
Введение в язык программирования «Java»Введение в язык программирования «Java»
Введение в язык программирования «Java»Unguryan Vitaliy
 
"Опыт создания системы управления сборкой и тестированием" (полная)
"Опыт создания системы управления сборкой и тестированием" (полная)"Опыт создания системы управления сборкой и тестированием" (полная)
"Опыт создания системы управления сборкой и тестированием" (полная)SPB SQA Group
 
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tips
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tipsКостянтин Чаус — Monitoring of huge Drupal site. Tools and tips
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tipsLEDC 2016
 
DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art)
DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art) DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art)
DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art) it-people
 
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...Stfalcon Meetups
 
Client Side Autotesting Flash
Client Side Autotesting FlashClient Side Autotesting Flash
Client Side Autotesting Flashguestb0af15
 
JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"oelifantiev
 
Agile Java Development компания JazzTeam - Техническая презентация Xml2Selenium
Agile Java Development компания JazzTeam - Техническая презентация Xml2SeleniumAgile Java Development компания JazzTeam - Техническая презентация Xml2Selenium
Agile Java Development компания JazzTeam - Техническая презентация Xml2Seleniumjazzteam
 
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко ДмитрийSolit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрийsolit
 
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...Dmitry Andreev
 
Компьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingКомпьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingTatiana Volkova
 
Распределённое нагрузочное тестирование на Java
Распределённое нагрузочное тестирование на JavaРаспределённое нагрузочное тестирование на Java
Распределённое нагрузочное тестирование на Javaaragozin
 
Построение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кодаПостроение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кодаTatyanazaxarova
 

Similar a Java 9 - кратко о новом (20)

IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчика
 
Dz Java Hi Load 0.4
Dz Java Hi Load 0.4Dz Java Hi Load 0.4
Dz Java Hi Load 0.4
 
Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...
 
Java 9: what is there beyond modularization
Java 9: what is there beyond modularizationJava 9: what is there beyond modularization
Java 9: what is there beyond modularization
 
Разговор про Java 9. Extended version
Разговор про Java 9. Extended versionРазговор про Java 9. Extended version
Разговор про Java 9. Extended version
 
Ввведение в java
Ввведение в javaВвведение в java
Ввведение в java
 
Введение в язык программирования «Java»
Введение в язык программирования «Java»Введение в язык программирования «Java»
Введение в язык программирования «Java»
 
Node.js (RichClient)
 Node.js (RichClient) Node.js (RichClient)
Node.js (RichClient)
 
"Опыт создания системы управления сборкой и тестированием" (полная)
"Опыт создания системы управления сборкой и тестированием" (полная)"Опыт создания системы управления сборкой и тестированием" (полная)
"Опыт создания системы управления сборкой и тестированием" (полная)
 
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tips
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tipsКостянтин Чаус — Monitoring of huge Drupal site. Tools and tips
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tips
 
DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art)
DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art) DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art)
DUMP-2012 - Только хардкор! - "Расширяем PHP" Сергей Горшков (index.art)
 
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
Использование Java Native Interface (JNI) и кросплатформенных C/C++ реализаци...
 
Client Side Autotesting Flash
Client Side Autotesting FlashClient Side Autotesting Flash
Client Side Autotesting Flash
 
JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"
 
Agile Java Development компания JazzTeam - Техническая презентация Xml2Selenium
Agile Java Development компания JazzTeam - Техническая презентация Xml2SeleniumAgile Java Development компания JazzTeam - Техническая презентация Xml2Selenium
Agile Java Development компания JazzTeam - Техническая презентация Xml2Selenium
 
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко ДмитрийSolit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
 
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...
 
Компьютерная графика. Введение в Processing
Компьютерная графика. Введение в ProcessingКомпьютерная графика. Введение в Processing
Компьютерная графика. Введение в Processing
 
Распределённое нагрузочное тестирование на Java
Распределённое нагрузочное тестирование на JavaРаспределённое нагрузочное тестирование на Java
Распределённое нагрузочное тестирование на Java
 
Построение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кодаПостроение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кода
 

Java 9 - кратко о новом

  • 1. Java 9 Ставила Леонид март, 2017 кратко о новомкратко о новом
  • 2. ● Модульная система - проект Jigsaw ● Интерпретатор Jshell ● Ahead-of-Time компиляция ● Реактивные стримы ● Усовершенствования Process API ● Images API - картинки с несколькими размерами ● Фабричные методы коллекций ● Клиент HTTP 2 ● Тесная интеграция с рабочим столом ● И многое другое Java 9: июль 2017
  • 3. ● Самое важное новшество в Java 9 ● Планировалась ещё в Java 7 ● Реализация длилась около 10 лет ● Все библиотеки сгруппированы в модули ● Используются только необходимые ● Ещё один уровень инкапсуляции — публичные классы видны, если это разрешено в модуле Модульная система проект Jigsaw
  • 4. Разработчики Java постарались на славу, максимально отвязав классы от сторонних зависимостей:
  • 5. ● Все модули: 137 Мб ● JavaFX: 30 Мб ● XML: 10 Мб ● java.base: 19 Мб Jigsaw: цифры
  • 6. ● Некоторые библиотеки, например com.sun.* не будут доступны по умолчанию. ● Введение модульности повлечёт за собой внесение изменений в предыдущий код. ● Усложнена система видимостей - теперь помимо классов и пакетов есть ещё и модули. Неудобства, недостатки
  • 7. Консоль, в которой можно объявлять переменные, писать выражения, выполнять команды и тут же получать результат. ● Дружелюбный для начинающих ● Удобный для разработчиков ● Автоматическое дополнение по клавише tab ● Сохранение/загрузка команд ● Не нужно ставить «;» JShell – интерпретатор Java 9
  • 8. Было: для проверки фрагмента кода создавался класс с методом main, или тестовый класс. ● Для начинающих это шок - много непонятного кода чтобы вывести на экран "Hello World!". ● Если громоздкое приложение - Spring, Hibernate, в добавок, код на JS - проверять кусочек кода очень дорого, подчас, минута-две и более ожидания, пока всё поднимется. JShell
  • 9. ● Компиляция непосредственно в машинный код ● Исполняемому файлу не нужны JRE, JDK ● Скорость выполнения близка к Си ● Невозможность декомпиляции Ahead-of-Time компиляция
  • 11. Утилита jaotc очень тщательно анализирует исходники (что невозможно при JIT компиляции) и переводит их в машинный код. Даже при AoT программа, написанная на Java будет работать хоть немножко, на какие-то доли процента, но медленнее чем аналогичная программа на Си. Причина - безопасность типов, проверки массивов на переполнение и прочие вещи, которые в Си могут запросто завалить не только работающее приложение, но и всю систему.
  • 12. Сейчас гарантируется только покрытие модуля java.base, то есть, объектов, потоков и структур данных. И то, только для 64-битных систем Linux. Вопрос создания таким образом даже оконного приложения под большим вопросом. Решение идеально для встраиваемых и мобильных систем, поскольку, динамическая компиляция потребляет ресурсы процессора и аккумулятора. В iOS запрещена динамическая загрузка кода, на Java было невозможно писать программы под телефоны от Apple.
  • 13. Асинхронная обработка потоков данных. Интерфейсы java.util.concurrent.Flow: Flow.Processor<T,R> Flow.Publisher<T> Flow.Subscriber<T> Flow.Subscription Издатель производит данные, потребляемые несколькими подписчиками. Подписки связывают издателей и подписчиков. Перспектива использования в распределённых приложениях очень реальная. Reactive Streams API Publish Subscribe Framework
  • 14. Информацию о процессе доступна с помощью java.lang.ProcessHandle: ● pid ● вся информация ● команда запуска ● время запуска ● суммарное процессорное время ● имя пользователя Так же можно уничтожать процессы. Имеется возможность повесить событие, которое будет происходить после завершения процесса: ProcessHandle.onExit(). Process API
  • 15. Интерфейс java.awt.image.MultiResolutionImage хранит картинки с несколькими размерами. Возвращает весь список картинок, или, зная габариты, подбирает наиболее подходящую. Применение: поддержка графики на различных мониторах. В зависимости от разрешения экрана и размера окна класс java.awt.Graphics будет получать нужный вариант картинки. Картинки с несколькими размерами в Images API
  • 16. Java 8: неизменяемые коллекции: Map<String, String> immutableMap = Collections.unmodifiableMap( new HashMap<String, String>() {{ put("key1", "Value1"); put("key2", "Value2"); put("key3", "Value3"); }}); Java 9: List<String> immutableList = List.of("one", "two"); Set<String> iSet = Set.of("value1", "value2"); Map<String, String> iMap = Map.of("key1", "Value1", "key2", "Value2"); Фабричные методы коллекций
  • 17. Доработка интерфейсов была начата ещё в Java 8. Были добавлены статические методы и методы по умолчанию. Теперь есть ещё и приватные методы. Повышают чистоту и ясность кода. Статические приватные классы доступны только в пределах интерфейса, обычные же можно вызывать из экземпляра интерфейса. Private методы в интерфейсах
  • 18. Команда try-с-ресурсами была введена в Java 7. В этом блоке объявляется переменная, и о её закрытии и освобождении ресурсов можно не беспокоиться, всё произойдёт автоматически. Такая запись была громоздкой: void printFileJava7() throws IOException { try (FileInputStream myInput = new FileInputStream("myfile.txt")) { int data = myInput.read(); while(data != -1){ System.out.print((char) data); data = myInput.read(); } } } Try-с-ресурсами
  • 19. В Java 9 такую переменную можно объявить за пределами блока try, главное, чтобы она была финальной, или вела себя как финальная. void printFileJava9() throws IOException { final FileInputStream myInput = new FileInputStream("myfile.txt") try (myInput) { int data = myInput.read(); while(data != -1){ System.out.print((char) data); data = myInput.read(); } } } Try-с-ресурсами
  • 20. Diamond operator упрощает запись параметризованных данных. List<String> preJava7 = new ArrayList<String>(); List<String> java7 = new ArrayList<>(); Повышается читабельность кода, но такая запись не работала с анонимными классами. Теперь и это в прошлом: List<String> list = new ArrayList<>(){ ... }; Улучшения для алмазного оператора
  • 21. Аннотация @Deprecated используется для пометок в Java API устаревшего или неверно работающего кода. Теперь у аннотации @Deprecated есть свойства forRemoval и since. Улучшение аннотации Deprecated
  • 22. Новый HTTP API с поддержкой HTTP/2 веб-сокетов. Замена устаревшему API HTTPURLConnection. Ещё не завершён, доступен в специальном модуле, который по умолчанию недоступен. Пример: создание HTTP-запроса и асинхронное получение ответа: URI testPageURI = new URI("http://127.0.0.1:8080/testPage"); CompletableFuture<HttpResponse> nonBlockingResponse = HttpRequest .create(testPageURI) .GET().responseAsync(); int tries = 0; while (!nonBlockingResponse.isDone() && tries++ < 5) { Thread.sleep(5); } if (nonBlockingResponse.isDone()) { HttpResponse response = nonBlockingResponse.get(); System.out.println("status code : " + response.statusCode() + " --> " + response.body(HttpResponse.asString())); } else { nonBlockingResponse.cancel(true); System.out.println("Cancelling, could not get response"); } Клиент HTTP 2
  • 23. Desktop приложения Java выделялись своей топорностью. Максимум - можно управлять размером окна. Для JavaFX даже иконку приложения нельзя указать! У современных систем: иконки в трее, панели, перетаскивание, какие-то свои меню и прочее. Класс java.awt.Desktop раздвигает границы возможностей. Например, можно реагировать на блокировку экрана, переключение пользователей, завершение работы системы. Улучшена работа с панелью задач, иконками, панелями, и т.д. Например, мигание иконки, если надо привлечь внимание, или подпрыгивание иконки в докере, или своё меню, индикатор завершения. Естественно, все эти радости сильно зависят от системы. В данный момент, лучше всего дела обстоят с OS X и Windows. Нативная интеграция с рабочим столом
  • 24. ● Applet API устарел ● Плагин Java для браузера умер ● javac больше не поддерживает исходный код Java 1.4 и старше. Прощание с усопшими
  • 25. ● Больше нельзя называть переменные символом подчёркивания. Он зарезервирован. ● Методы в Optional, такие как конвертер в Stream и or ● Аннотация SafeVarrargs для приватных методов ● Поддержка TIFF, экранов высокого разрешения, улучшения в Java 2D ● Сжатые строки ● UTF-8 в файлах свойств ● Нескольких версий в одном JAR файле ● Улучшена поддержка ECMAScript 6. ● Ограничения памяти для контейнеров, таких как Docker ● Unicode 8.0 Другие изменения, дополнения
  • 26. ● Унифицированное логирование в JVM ● Stack-Walking API – работа со stack traces. ● Поиск по документации Java ● Генерация JavaDoc в формате HTML 5 Документация и логирование
  • 27. ● JSON API ● Вывод типов локальных переменных (var) Возможно, мы их увидим в Java 10 В Java 9 не вошли