До выхода Feature Complete версии OpenJDK 9 EA остался месяц. Самое время посмотреть, что ждет нас в следующей версии Java. Для начала рассмотрим процесс того, как идеи становятся JEP-ами, а потом становятся частью стандарта языка Java. Потом посмотрим на список из четрех десятков фич, разберем наименее тривилаьные из них на примерах: jshell, jmh, unified jvm logging и, конечно же, модулярность.
В Java 9 с неизбежностью появятся модули. Кого-то это мало волнует, кого-то пугает, кто-то искренне недоумевает: зачем, ведь у нас уже больше 15 лет есть OSGi, который решает ровно те же проблемы, что и модули? Здесь мы попробуем разобраться, какие проблемы пытается решить OSGi, как он их решает и решает ли в действительности. Затем посмотрим, какие проблемы, которые пытается решить OSGi, Jigsaw совсем не решает и почему, а также какие проблемы решает и как. Ну и в конце, какие проблемы Jigsaw при этом привносит в экосистему Java и что с этим делать.
JVM: краткий курс общей анатомии, JPoint 2016 Conference EditionNikita Lipsky
Говоря о Java, мы подразумеваем как минимум две вещи: JVM (виртуальную Java-машину) и Java-байткод, который исполняется на этой машине.
Внутреннее устройство JVM непростое, но очень важно понимать, из каких частей она состоит, какая часть за что отвечает и как это все вместе работает хотя бы в самых общих чертах. Эти знания помогут вам в понимании того, как работает ваша программа и как можно улучшить ее работу.
В этом докладе мы не будем лезть в кишки какой-то конкретной реализации JVM, однако мы покажем где у JVM кишки расположены, а также где находятся и для чего служат ее печень, сердце, почки, мозг и другие органы.
В Java 9 с неизбежностью появятся модули. Кого-то это мало волнует, кого-то пугает, кто-то искренне недоумевает: зачем, ведь у нас уже больше 15 лет есть OSGi, который решает ровно те же проблемы, что и модули? Здесь мы попробуем разобраться, какие проблемы пытается решить OSGi, как он их решает и решает ли в действительности. Затем посмотрим, какие проблемы, которые пытается решить OSGi, Jigsaw совсем не решает и почему, а также какие проблемы решает и как. Ну и в конце, какие проблемы Jigsaw при этом привносит в экосистему Java и что с этим делать.
JVM: краткий курс общей анатомии, JPoint 2016 Conference EditionNikita Lipsky
Говоря о Java, мы подразумеваем как минимум две вещи: JVM (виртуальную Java-машину) и Java-байткод, который исполняется на этой машине.
Внутреннее устройство JVM непростое, но очень важно понимать, из каких частей она состоит, какая часть за что отвечает и как это все вместе работает хотя бы в самых общих чертах. Эти знания помогут вам в понимании того, как работает ваша программа и как можно улучшить ее работу.
В этом докладе мы не будем лезть в кишки какой-то конкретной реализации JVM, однако мы покажем где у JVM кишки расположены, а также где находятся и для чего служат ее печень, сердце, почки, мозг и другие органы.
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 днейSkillFactory
Дмитрий Андрушко, инструктор Академии Oracle по Java-технологиям – о том, как подготовиться к первой ступени в непростой системе сертификации Oracle (Oracle Certified Associate, Java SE 7 Programmer), стать успешным Java-разработчиком и работать в крупнейших банках и корпорациях, если вы только начинаете знакомство с этим языком программирования.
Доклад на конференциях JPoint 2016, JBreak 2016
Abstract: В Java SE 8 были добавлены лямбда-выражения, дефолтные методы, типовые аннотации, компактные профили и т.п., что привело к изменениям в спецификации Java SE платформы.
В этом докладе мы рассмотрим, как новые возможности, добавленные в Java 8, были реализованы в Excelsior JET JVM, полностью написанной с нуля, совершенно непохожей на Oracle HotSpot, но при этом совместимой со спецификацией Java SE.
В итоге, слушатель освежит в памяти, что появилось в Java 8, как это повлияло на спецификацию JVM, во что превращаются лямбда-выражения в Java байт-коде, как их можно статически оптимизировать, а также получит некоторое представление о внутреннем устройстве еще одной JVM.
Java SE 8 has brought lambdas, default methods, type annotations, compact profiles, etc. As a result, the Java SE platform specification was changed to reflect new features.
The session shows how the new Java 8 features have been implemented in Excelsior JET JVM, written from scratch, very different from the Oracle HotSpot JVM, but compatible with the Java SE specification.
As a result, an attendee will refresh his/her memory regarding new Java 8 features, will learn how they affected the JVM specification, how the lambda expressions are translated into Java bytecode and how they can be optimized at the JVM level.
Получасовая презентация по Java 9. Конечно, рассказать можно много больше, да и часть выводов прозизносил вслух, но в любом случае, если интересна Java 9, то изучение можно начать со ссылок в конце презентации.
Критика, предложения приветствуются.
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»Yulia Tsisyk
Ни один современный продукт не обходится без API. Этот API может быть внешним, для публичного использования, а может быть сугубо внутренним, но требования к созданию расширяемого, версионируемого, тестируемого, документированного программного интерфейса очень похоже. В этом докладе мы поговорим о том, как создавать подобные API на основе REST, какие существуют best-practices, чего следует избегать, на что обращать внимание при проектировании.
This presentation is devoted to Scala programming language, its perks and disadvantages, elegant solutions and hidden traps.
This presentation by Dmytro Mantula (Lead Software Engineer, GlobalLogic) was delivered at JEEConf (Kyiv) on May 23, 2015.
Верификация Java байткода: когда, как, а может отключить?Nikita Lipsky
Сегодня Java разработчики все чаще используют библиотеки для порождения Java байт-кода в рантайме. Делается это для эффективной реализации различных трюков, которые сложно или невозможно выразить на языке Javа. Когда используется Java, компилятор javac гарантирует, что на выходе получится корректный Java байт-код. Но, спускаясь на уровень непосредственно байт-кода, часто нужно самостоятельно следить за его корректностью. Иначе при загрузке порожденных классов на выходе будет j.l.VerifyError, потому что JVM посредством верификатора Java байт-кода строго следит за корректностью байт-кода, который она загружает. Таким образом, порождая байт-код, недостаточно просто знать семантику байт-кодных инструкций — нужно также знать, как работает Java byte-code верификатор, какой байт-код он считает корректным, а какой нет.
В этом докладе мы разберемся, какую миссию в JVM несет верификатор байт-кода, когда и как он работает, может ли повлиять на производительность вашего приложения и почему опасно его отключать.
Полной автоматизацией процесса сборки приложения уже никого не удивишь. Не в последнюю очередь благодаря Maven – системе управления жизненным циклом проекта. Однако проекты растут очень быстро: увеличивается количество модулей, тестов, зависимостей, используемых плагинов. И всего лишь за год легковесный проект, на сборку которого уходило 5 минут, превращается в монстра, который пожирает время разработчиков 30-минутной сборкой. Чтобы справится с этой проблемой разработчикам приходится постоянно чистить свой код и бороться со скоростью выполнения тестов. Это верное решение, но не следует забывать о том, что и сам процесс сборки можно улучшить. В этом докладе будет рассмотрено, как при помощи простых и нехитрых шагов можно оптимизировать работу с зависимостями и обогатить скрипты сборки полезными плагинами. Также будут обсуждаться тонкости конфигурации основных плагинов и особенности работы с командной строкой, которые появились в последней версии Maven.
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...Ontico
РИТ++ 2017, AppsConf
Зал Найроби + Касабланка, 5 июня, 11:00
Тезисы:
http://appsconf.ru/2017/abstracts/2584.html
Большинство современных мобильных приложений так или иначе работает с каким-то API (а зачастую и не с одним). Количество запросов при этом может достигать десятков в минуту и понимание того, что сейчас происходит в сетевом слое вашего приложения, становится непростой задачей.
Я расскажу и покажу весь диапазон современных средств для мониторинга и отладки сетевых запросов: от самых простых до узкоспециальных - с плюсами/минусами каждого из инструментов и областями их применения.
Привет, Санкт-Петербург!
В разгар летнего сезона, мы поговорим об историях обновлений,
например, с 6.4 до 7.х, с разными трюками, а также об истории исследования разных регрессий на продуктах Atlassian и других плагинов.
Наша программа будет пополняться, и мы рады к сотрудничеству.
Ждем Вас на встрече в Яндекс Деньгах.
Совсем скоро выйдет Java 9, которая готовит нам много новых и интересных вещей, таких как jshell, Process API, методы-фабрики для коллекций, мультирелизные JAR-файлы и др. Но самым главным изменением будет, конечно же, введение модулей. Модуль - это новая единица инкапсуляции, которая позволит указывать явно зависимости между программными компонентами и строго контролировать, какие public-классы доступны для других компонент, а какие нет. В этой презентации мы рассмотрим в подробностях механизм модулей Java 9, в частности, как объявляются модули и как модуляризована сама JDK, а также, какие проблемы могут встретиться при миграции приложения на Java 9.
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 днейSkillFactory
Дмитрий Андрушко, инструктор Академии Oracle по Java-технологиям – о том, как подготовиться к первой ступени в непростой системе сертификации Oracle (Oracle Certified Associate, Java SE 7 Programmer), стать успешным Java-разработчиком и работать в крупнейших банках и корпорациях, если вы только начинаете знакомство с этим языком программирования.
Доклад на конференциях JPoint 2016, JBreak 2016
Abstract: В Java SE 8 были добавлены лямбда-выражения, дефолтные методы, типовые аннотации, компактные профили и т.п., что привело к изменениям в спецификации Java SE платформы.
В этом докладе мы рассмотрим, как новые возможности, добавленные в Java 8, были реализованы в Excelsior JET JVM, полностью написанной с нуля, совершенно непохожей на Oracle HotSpot, но при этом совместимой со спецификацией Java SE.
В итоге, слушатель освежит в памяти, что появилось в Java 8, как это повлияло на спецификацию JVM, во что превращаются лямбда-выражения в Java байт-коде, как их можно статически оптимизировать, а также получит некоторое представление о внутреннем устройстве еще одной JVM.
Java SE 8 has brought lambdas, default methods, type annotations, compact profiles, etc. As a result, the Java SE platform specification was changed to reflect new features.
The session shows how the new Java 8 features have been implemented in Excelsior JET JVM, written from scratch, very different from the Oracle HotSpot JVM, but compatible with the Java SE specification.
As a result, an attendee will refresh his/her memory regarding new Java 8 features, will learn how they affected the JVM specification, how the lambda expressions are translated into Java bytecode and how they can be optimized at the JVM level.
Получасовая презентация по Java 9. Конечно, рассказать можно много больше, да и часть выводов прозизносил вслух, но в любом случае, если интересна Java 9, то изучение можно начать со ссылок в конце презентации.
Критика, предложения приветствуются.
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»Yulia Tsisyk
Ни один современный продукт не обходится без API. Этот API может быть внешним, для публичного использования, а может быть сугубо внутренним, но требования к созданию расширяемого, версионируемого, тестируемого, документированного программного интерфейса очень похоже. В этом докладе мы поговорим о том, как создавать подобные API на основе REST, какие существуют best-practices, чего следует избегать, на что обращать внимание при проектировании.
This presentation is devoted to Scala programming language, its perks and disadvantages, elegant solutions and hidden traps.
This presentation by Dmytro Mantula (Lead Software Engineer, GlobalLogic) was delivered at JEEConf (Kyiv) on May 23, 2015.
Верификация Java байткода: когда, как, а может отключить?Nikita Lipsky
Сегодня Java разработчики все чаще используют библиотеки для порождения Java байт-кода в рантайме. Делается это для эффективной реализации различных трюков, которые сложно или невозможно выразить на языке Javа. Когда используется Java, компилятор javac гарантирует, что на выходе получится корректный Java байт-код. Но, спускаясь на уровень непосредственно байт-кода, часто нужно самостоятельно следить за его корректностью. Иначе при загрузке порожденных классов на выходе будет j.l.VerifyError, потому что JVM посредством верификатора Java байт-кода строго следит за корректностью байт-кода, который она загружает. Таким образом, порождая байт-код, недостаточно просто знать семантику байт-кодных инструкций — нужно также знать, как работает Java byte-code верификатор, какой байт-код он считает корректным, а какой нет.
В этом докладе мы разберемся, какую миссию в JVM несет верификатор байт-кода, когда и как он работает, может ли повлиять на производительность вашего приложения и почему опасно его отключать.
Полной автоматизацией процесса сборки приложения уже никого не удивишь. Не в последнюю очередь благодаря Maven – системе управления жизненным циклом проекта. Однако проекты растут очень быстро: увеличивается количество модулей, тестов, зависимостей, используемых плагинов. И всего лишь за год легковесный проект, на сборку которого уходило 5 минут, превращается в монстра, который пожирает время разработчиков 30-минутной сборкой. Чтобы справится с этой проблемой разработчикам приходится постоянно чистить свой код и бороться со скоростью выполнения тестов. Это верное решение, но не следует забывать о том, что и сам процесс сборки можно улучшить. В этом докладе будет рассмотрено, как при помощи простых и нехитрых шагов можно оптимизировать работу с зависимостями и обогатить скрипты сборки полезными плагинами. Также будут обсуждаться тонкости конфигурации основных плагинов и особенности работы с командной строкой, которые появились в последней версии Maven.
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...Ontico
РИТ++ 2017, AppsConf
Зал Найроби + Касабланка, 5 июня, 11:00
Тезисы:
http://appsconf.ru/2017/abstracts/2584.html
Большинство современных мобильных приложений так или иначе работает с каким-то API (а зачастую и не с одним). Количество запросов при этом может достигать десятков в минуту и понимание того, что сейчас происходит в сетевом слое вашего приложения, становится непростой задачей.
Я расскажу и покажу весь диапазон современных средств для мониторинга и отладки сетевых запросов: от самых простых до узкоспециальных - с плюсами/минусами каждого из инструментов и областями их применения.
Привет, Санкт-Петербург!
В разгар летнего сезона, мы поговорим об историях обновлений,
например, с 6.4 до 7.х, с разными трюками, а также об истории исследования разных регрессий на продуктах Atlassian и других плагинов.
Наша программа будет пополняться, и мы рады к сотрудничеству.
Ждем Вас на встрече в Яндекс Деньгах.
Совсем скоро выйдет Java 9, которая готовит нам много новых и интересных вещей, таких как jshell, Process API, методы-фабрики для коллекций, мультирелизные JAR-файлы и др. Но самым главным изменением будет, конечно же, введение модулей. Модуль - это новая единица инкапсуляции, которая позволит указывать явно зависимости между программными компонентами и строго контролировать, какие public-классы доступны для других компонент, а какие нет. В этой презентации мы рассмотрим в подробностях механизм модулей Java 9, в частности, как объявляются модули и как модуляризована сама JDK, а также, какие проблемы могут встретиться при миграции приложения на Java 9.
Рассказ о главном новшестве Java 9: проекте Jigsaw и системе модулей.
С момента выхода девятки прошёл уже почти год, и за это время даже успела выйти Java 10, но подавляющее большинство всё ещё использует Java 8 и более старые версии. Однако переход на новые версии каждому рано или поздно придётся сделать, поэтому уже сейчас было бы неплохо иметь базовое понимание модульности в Java и подготовиться к будущей миграции.
В докладе рассказано об истории появления модулей в JDK, о том, зачем они нужны обычному программисту и как они могут облегчить разработку и поддержку больших систем. Также рассказано, какие типичные проблемы могут возникнуть при миграции старых приложений на модули и как заранее подготовиться, чтобы избежать этих проблем в будущем.
Доклады с прошедшей JiraMania: про обновления, зависимости и дедлокиGonchik Tsymzhitov
В августе Яндекс.Деньги провели митап Jiramania. На нем разработчики и администраторы рассказали про отмычки и ноу-хау по работе с Jira.
Помимо неспешных бесед за кофе и круассанами, Гончик Цымжитов из ITIVITI поделился перцовыми пластырями от боли обновления Jira. После чего на сцену вышел Вадим Гаузяк из СберТеха с результатами своего исследования дедлока в agile-плагине Jira 7.
Но хватит интриг — под катом вы найдете оба доклада.
ThinkJavaKharkiv#1 Шеф, все пропало. Проблемы с ProductionVladimir Malinin
Если приложение регулярно падает, заказчики нервничают, сроки поджимают и не понятно в чём проблема, не стоит паниковать. Мы расскажем вам, что делать в такой ситуации и покажем, как мы выходили из сложившейся ситуации. В докладе на примере двух реальных проектов рассматриваются проблемы, которые могут возникать с Web приложениями на production environment’ах, пути их решения и инструменты, которые для этого могут быть использованы. Подробно будет рассмотрена настройка и использование JavaMelody. Докладчики: Владимир Малинин и Антон Семаник (Nix Solutions)
Graal, Truffle, SubstrateVM and other perks: what are those and why do you ne...Oleg Chirukhin
GraalVM is a universal virtual machine for running applications written in JVM-based languages (Java, Scala, Clojure, Kotlin), JavaScript, Python, Ruby, R, and LLVM-based languages such as C and C++.
Quite often research projects look like something out of the world, something you won’t probably use in real life. Graal changes the picture: it took the stage out of the blue, and not as a newbie, but as a mature competitor. In this talk, we’ll look at what Graal consists of and what practical use you can get from it right now.
We’ll talk about GraalVM components:
Graal Compiler – an optimizing compiler that supports both dynamic and static compilation and can integrate with the Java HotSpot VM or run standalone. We’ll see how to run existing applications, and what benefit (in numbers) it can bring.
Substrate VM — a framework for ahead-of-time (AOT) compilation into executable images or shared objects. It sounds like a most radical and cheating optimization because it works the way no one else can (under closed-world assumption).
Truffle – language implementation framework for creating languages and instrumentations for GraalVM. Language design is a very complex field, so here we’ll focus on existing languages from GraalVM distribution.
http://techtalks.nsu.ru
Видеозапись: http://www.youtube.com/watch?v=blXQTBiYbzs
10 декабря 2014. AOT-компиляция Java (Никита Липский, Excelsior)
«Ahead-of-time (AOT) компиляция, или статическая компиляция, не так давно объявлена компанией Oracle как одно из нововведений Java 9 — следующего мажорного релиза Java. Это объявление вызвало разнообразную реакцию в сообществе Java-программистов: некоторые удивляются почему только сейчас, кто-то в недоумении, потому что всегда считал, что AOT-компилятор для Java не возможен теоретически из-за богатых динамических возможностей Java, многие убеждены, что AOT не нужен для Java, потому что он не может конкурировать по производительности с JIT, который использует динамический профиль исполнения для оптимизации программ на лету. В этом докладе я попробую развеять распространенные мифы, которые сложились вокруг AOT-компиляции Java, расскажу почему AOT-компиляция возможна с сохранением всех динамических особенностей Java, покажу где этот подход имеет преимущества в производительности перед динамической компиляцией (JIT) с технической точки зрения, а также обрисую для чего вообще может быть полезна AOT-компиляция для Java.»
Лекция прочитана в рамках проекта Tech Talks @NSU – серии открытых лекций о разработке ПО и карьере в IT, проводимых в Новосибирском государственном университете.
Подробности: http://techtalks.nsu.ru
http://techtalks.nsu.ru
Видеозапись: http://www.youtube.com/watch?v=blXQTBiYbzs"
10 декабря 2014. Никита Липский (Excelsior) рассказывает про AOT-компиляцию
Ahead-of-time (AOT) компиляция, или статическая компиляция, не так давно объявлена компанией Oracle как одно из нововведений Java 9 — следующего мажорного релиза Java. Это объявление вызвало разнообразную реакцию в сообществе Java-программистов: некоторые удивляются почему только сейчас, кто-то в недоумении, потому что всегда считал, что AOT-компилятор для Java не возможен теоретически из-за богатых динамических возможностей Java, многие убеждены, что AOT не нужен для Java, потому что он не может конкурировать по производительности с JIT, который использует динамический профиль исполнения для оптимизации программ на лету.
В этом докладе я попробую развеять распространенные мифы, которые сложились вокруг AOT-компиляции Java, расскажу почему AOT-компиляция возможна с сохранением всех динамических особенностей Java, покажу где этот подход имеет преимущества в производительности перед динамической компиляцией (JIT) с технической точки зрения, а также обрисую для чего вообще может быть полезна AOT-компиляция для Java.
Лекция прочитана в рамках проекта Tech Talks @NSU – серии открытых лекций о разработке ПО и карьере в IT, проводимых в Новосибирском государственном университете.
Подробности: http://techtalks.nsu.ru
Science, Technology, Engineering and Mathematics, STEM, are vital to the future of our children. The parents and students in our educational systems need to understand and embrace the technology that affects them every day of their lives. Devoxx4Kids is on a global mission to complement the classical schooling system by offering workshops to kids in a fun way. and teaching them computing concepts using Scratch, Greenfoot, Minecraft, Raspberry Pi, Arduino, NAO, Tynker. We will share a path that can be followed by adults to keep kids in their vicinity engaged and build, instead of just play, games. You will learn best practices to organize similar workshops in your local setting and hear tips on opening a local chapter. This talk will be appreciated by anybody who has kids, nephews, nieces, and in general kids around them.
Writing concurrent code that is also correct is unbelievably hard. Naturally, humanity has developed a number of approaches to handle concurrency in the code, starting from basic threads that follow the hardware way to do concurrency to higher level primitives like fibers and work-stealing solutions. But which approach is the best for you? In this session, we'll take a look at a simple concurrent problem and solve it using different ways to manage concurrency: threads, executors, actors, fibers, monadic code with completable futures. All these approaches are different from the simplicity, readability, configuration and management point of view. Some scenarios are better modelled with threads, while sometimes you're better off with actors. We'll discuss the benefits of each approach and figure out when it's worth pursuing in your project.
Continuously building, releasing and deploying software: The Revenge of the M...JavaDayUA
We used to release one product, once a year, built by one team. Today we have teams of hundreds of developers creating a multitude of software packages that are released multiple times a day.How did that happen?! In this talk, we’ll give you the answer: As the good old advice of Computer Science goes, “If it hurts, do it more often!”. Suddenly, we realized that what we do during the “Release Month Code Freeze” is actually a lot of repeatable, automatable steps. So, we called in the machines.Now we have Continuous Integration servers controlling an exponential amount of robot developers (agents) that are building and testing our code, all day long. Continuous Deployment tools, dictating their order to robot sysadmin, deploying our software on a rapidly increasing amount of varied platforms, as frequent as we please.The Machines got their revenge, and “we, for ones, welcome our new robotic overlords”!
The Epic Groovy Puzzlers S02: The Revenge of the ParenthesesJavaDayUA
More strange, more bizarre, more fun! The Groovy Puzzlers hits with its second season in which we implemented the lesson learned from the first one – do more of the same (always as a duet)! Expect even more “NO WAY!”, “WHOA!”, “WTF!”, O_o and prizes flying around, and expect to learn more about Groovy’s darkest secrets! As usual, the traps we fell into here in JFrog and contributions from top-notch Groovy authors and users!
This keynote will be a historical trip down memory lane - going through 20 years of Java and JVM implementations. This will be partly from Marcus’s own perspective as one of the architects behind JRockit, with plenty of stories from the trenches, like the benchmarking competitions between BEA/Oracle, Sun and IBM. We will see how Java and the JVM turned into the robust high performance server side platform that it is today, partly through personal observations and partly through a more objective “what a long strange trip this has been”. He will take you back to 1995 in a time machine and slowly bring you to 2014, going over the major Java releases and the runtime innovations made in the JVM side to get us here. Finally, we will do a short trip into the future, even though the future is always fuzzy, to explore what might be coming next. With Java 8, the biggest release in Java history, Java is more vibrant and alive than ever before. This is an evolution that won’t be stopped.
As developers we always look for ways to do things faster, better, and automate as much as possible. We write code in top-notch IDEs that have static code analysis, automatic refactoring and so on, we run unit tests, we use CI servers, and issue trackers, we adopt agile practices to get feedback and deliver as fast as possible. As far as code review practice goes, there’s still a lot to be improved, and in this talk I’m going to tell you how you can perform efficient, transparent and useful code reviews.
Unlocking the Magic of Monads with Java 8JavaDayUA
This code-heavy session demystifies what monads are and outlines reasons why you would even want to introduce them into your code. We’ll take a look at the traditional definition for monads and offer a corresponding type definition in Java. We’ve selected a sample Java 8 implementation of a ‘Promise’ monad, which represents the result of async computation to help us answer practical questions about monads. Also, we'll go over the Laws of Monads and show that you can have a proper monad in Java, if you are brave enough to allow the underlying platform change the rules a bit. PS. You won’t be penalised or ridiculed during this session for your (lack of) Haskell knowledge!
Virtual Private Cloud with container technologies for DevOpsJavaDayUA
DevOps with Containers in Virtual Private Cloud and Hybrid Cloud. A new opportunity for hosting providers to attract Enterprise customers. Containers have changed the mind of IT in DevOps. They enable developers to work with dev, test, stage and production environments identically. Containers provide the right abstraction for Microservices and many cloud platforms have integrated them into deployment pipelines. DevOps and Containers together help companies to achieve their business goals faster and more effectively. At this session we will review the current landscape of DevOps with Containers and the benefits for hosting providers. In addition, we will discuss known issues and solutions for enterprise applications in Containers.
JShell: An Interactive Shell for the Java PlatformJavaDayUA
Read-Execute-Print-Loops (REPLs) have emerged as powerful tools for learning and prototyping. JShell brings this power to Java. Targeted for JDK 9, and tightly integrated with the Java compiler and virtual machine, JShell enhances the programming experience for the Java language. Learn how to use JShell to explore new APIs, prototype code, or learn the Java language. Interactively explore new features of JDK 9. See the features that speed up coding.
Interactive Java Support to your tool -- The JShell API and ArchitectureJavaDayUA
Explore the JShell API. Learn how it can be used to add interactive Java expression/declaration execution to new or existing tools. See how the completion functionality can enhance code editors or analyzers. Get a behind the scenes look at the JShell architecture and its deep integration with the Java platform.
MapDB - taking Java collections to the next levelJavaDayUA
Java collections have several limitations. But imagine library without limits, which could even replace your database. This session talks about drop-in replacement with many new possibilities. MapDB provides Java collections backed by in-memory or on-disk store. It adds extra features to traditional collections (entry expiration, binding, secondary collections…). It is also proper database engine and has transactions, snapshots, incremental backups… And finally it is not affected by GC, so it can take a billion entries without a hiccup.
Java heap memory model has wasteful memory usage. References, object headers, internal collection structure, extra fields such as String.hashCode… This talk shows practical ways to reduce memory usage and fit more data into memory: primitive types, specialized java collections, bit packing, reducing number of pointers, replacing String with char[], semi-serialized objects… As bonus we get lower GC overhead by reducing number of references.
The JRockit JVM was originally developed by Appeal Virtual Machines as a from scratch server-side JVM in order to compete with HotSpot from Sun Microsystems. Appeal Virtual Machines was acquired by BEA Systems in 2002, which in turn became part of Oracle in 2010. JRockit is battle proven in the commercial space as a high performance server JVM and has unique monitoring and manageability capabilities for doing zero overhead instrumentation of production systems. This talk covers the design rationales that the JRockit architects did in code generation, memory management, synchronization and serviceability. The JRockit and HotSpot JVMs are currently in the process of being merged into one code base, most of which will be part of the OpenJDK.
Next-gen DevOps engineering with Docker and Kubernetes by Antons KrangaJavaDayUA
Docker is in font of container madness that forces us to rethink our entire architecture and development practices. This session will be focusing around building Java runtimes on Docker containers and running it with Kubernetes. We will focus on different deployment aspects specific to the Docker and Kubernetes and utilise DevOps engineering managed by Jenkins.
Some previous knowledge of docker is not required however advised
Apache Cassandra. Inception - all you need to know by Mikhail DubkovJavaDayUA
Cassandra is a powerful NoSql database based on solid fundamentals of distributed computing and fail-safe design, and it is well-tested by companies such as Facebook, Twitter, and Netflix. Unlike conventional databases and some of the modern databases that use the master-slave pattern, Cassandra uses the all-nodes-the-same pattern; this makes the system free from a single point of failure.
Solution Architecture tips & tricks by Roman ShramkovJavaDayUA
In this presentation we will cover:
* What is Solution Architecture and how it differs from other architectures
* What is good and what is bad for SA, tips & tricks from our experience
Testing in Legacy: from Rags to Riches by Taras SlipetsJavaDayUA
In this presentation I'd like to share practical experience and techniques that were used for modernization and maintaining 10+ years old legacy system: pitfalls that we've faced during that process and conclusions that we'd made when we've successfully finished updating mission.
Reactive programming and Hystrix fault tolerance by Max MyslyvtsevJavaDayUA
Reactive programming is a new paradigm that provides asynchronous event-based flow control. Java implementation is called rxJava and is being developed by Netfix. They have also released Hystrix — a non-functional layer that provides fault tolerance and latency features which also exposes reactive API.
Spark-driven audience counting by Boris TrofimovJavaDayUA
The story about Ad world and real-time segments counting. Size of data does not allow doing straightforward calculations so we will dive into the solution step-by step involving some "secret" algorithms from Google.
API first with Swagger and Scala by Slava SchmidtJavaDayUA
How does one scale the development of a service landscape in a corporate enterprise environment utilizing Typesafe's Play and Akka software stack? How does one achieve API uniformity and coherence accross dozens of development teams, getting them and their subsequently developed subsystems to play together nicely? At Zalando we believe firmly in an API first approach, founded an API guild that ratifies and supports the development of APIs, and define them in a formal manner employing the Swagger API representation language.
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