Java 8: Advanced Stream Techniques
На текущий момент только снежные люди да ленивые Java-разработчики не слышали про новую Java8 и её клёвую фичу «Stream API». Самые бодрые даже успели что-нибудь помапредьюсить. Но существует категория людей, которые ещё в детстве начинали с вопроса «почему у новой машинки 4 колеса, а не 5?», а заканчивали горсткой деталек. Банально помапредьюсить и бросить — это не для них, для них — этот доклад. В нём мы попытаемся понять, почему «Stream API» получился таким, какой он есть, вскроем внутренности, разберем до деталек, и соберем обратно. Мы научимся создавать свои Stream'ы, а также эффективнее использовать имеющиеся.
Требование к аудитории: иметь представление о базовом Stream API.
Железные счетчики на страже производительности
Нередко при анализе производительности приложений приходится много копать. Но просто копать недостаточно, нужно еще разгребать накопанное. Железный век настал более 3000 лет назад, и было бы удивительно, если бы за это время человечество не создало кучу разнообразных железных приспособлений для копания и разгребания.
В данном докладе мы узнаем, что же такое «Hardware Performance Counters», где их найти, и как их можно использовать для анализа производительности.
Прагматика Java Memory Model
Спецификация Java Memory Model в JLS пытается быть предельно сжатой и полной. Поскольку JMM пытается объять очень большой пласт явлений, её формализм весьма громоздок, что обернулось потерей понимабельности модели простыми смертными.
В этом докладе мы попытаемся проследить за логикой построения модели; поговорим о том, каких прагматических результатов модель пыталась добиться; посмотрим, с какими ограничениями злого внешнего мира при этом пришлось столкнуться; увидим, как JMM пытается балансировать между требованиями девелоперов и требованиями разработчиков рантаймов и железа.
Плюс к этому, посмотрим, куда копает и будет копать апдейт JMM в JDK 9.
Java Benchmarking: как два таймстампа записать!
Померить производительность — это так просто! Два раза по System.nanoTime(), взяли разность, сложили-поделили, и всё, можно оптимизировать. Как бы не так!
В этом докладе мы поговорим о том, как исследуют производительность приложений при помощи бенчмарков, какие частые ошибки возникают, как с ними бороться, и как вообще получить хоть какие-то полезные данные о мире, где всё от всего зависит. Красной нитью в докладе проходит Java Microbenchmark Harness (JMH), стандартный харнесс для написания и исследования бенчмарков в OpenJDK.
Аварийный дамп — «черный ящик» упавшей JVM
Виртуальная машина Java способна отловить широкий спектр ошибок программирования. Результат она выдаст в виде исключения со стек-трейсом. Но что делать, если падает сама JVM, оставив лишь предсмертную записку под именем hs_err.log с загадочным содержимым?
В докладе будет рассказано о том, что же зашифровано в аварийном дампе, и как эту информацию можно использовать для анализа проблемы и поиска причины. Мы рассмотрим ситуации, в которых JVM может сломаться, и в режиме живой демонстрации разберём примеры реальных падений, случившихся при разработке высоконагруженных приложений.
Многопоточность Java под капотом
Все абстракции рано или поздно протекают, какими бы красивыми и стройными они ни были. Протекают и те, что скрывают за громкой фразой "Write Once, Run Anywhere" особенности исполнения многопоточного кода на реальном железе.
И горе после такой протечки тому, кто не понимает, как всё устроено под капотом. Частенько для того, чтобы разобраться в каком-то поверхностном явлении, приходится разрывать все любезно накрученные слои абстракции. Понимать Модель Памяти Java — важно, но этого мало. Нужно ещё и знать, как эта модель устроена, и понимать, почему именно так. А для этого нужно идти глубже!
Доклад будет состоять из краткого теоретического описания происходящего, а затем решительно перейдёт к расчленению OpenJDK в режиме живого демо. Мы рассмотрим, как реализованы volatile переменные и synchronized блоки, узнаем, что же такое мембар и почему все так любят x86, и напоследок жестоко надругаемся над HotSpot!
Java 8 и JVM: что нового в HotSpot?
Java 8 выходит в конце марта 2014 года. На слуху долгожданные лямбда-выражения и Streams API, но только ли этим ограничиваются изменения в Java платформе 8й версии? В докладе речь пойдет о нововведениях в HotSpot JVM в Java 8: поддержка дефолтных методов, отказ от PermGen'а и другие более простые, но от этого не менее полезные, улучшения.
Java Embedded у вас дома
Встроенные устройства все больше проникают в нашу жизнь. Телеметрия, геолокация, управление производством, маркетинг, реклама и многие другие сферы используют подключенные к сети устройства. Популярность подобных систем растёт с каждым днём, что не удивительно, так как они представляют возможность управлять своим домом из любой точки планеты. Каждый "умный дом" — это очень индивидуальная система. Действительно, каждый хочет настроить поведение своего жилища так, чтобы жильцам было удобно безопасно и комфортно. Java — отличный инструмент как для создания оконечных устройств, так и для построения интегрированной системы управления.
Из доклада вы узнаете о том, какие версии Java предназначены для использования на встроенных устройствах. Чем они отличаются. Какие платформы поддерживаются. Как Java работает на ARM архитектуре. Как с помощью Java управлять устройствами с UART, I2C, SPI интерфейсами. Увидите, как за 5 минут написать код управления реле, задеплоить приложение на микрокомпьютер Raspberry Pi и запустить прямо не выходя из IDE.
Если вы Java-программист и хотите применить свой опыт высокоуровневого программирования в Embedded или вам просто интересно сделать что-то интереное у вас дома, то этот доклад именно для вас!
Компромиссы, или Как проектируются языки программирования
Когда-то очень давно компьютеры были большими, а языки программирования — маленькими. Теперь всё ровно наоборот: компьютеры довольно маленькие, а языки — довольно большие. Почему? Все дело в балансе: слишком большой язык сложно изучать, слишком маленький — сложно использовать. Это один пример компромисса в дизайне языков, и таких примеров очень много на разных уровнях абстракции: от вопросов бинарной совместимости до конкретного синтаксиса и читаемости программ.
Этот доклад посвящен таким компромиссам: почему разработчики языков делают так или иначе. Мы рассмотрим несколько характеных примеров, касающихся Kotlin, Java, Scala и C#, что позволит сформировать некоторое представление о том, как проектируются языки.
Босиком по граблям Hibernate
Я использую Hibernate очень давно, начиная еще с первых версий. За это время я успел попробовать его в проектах совершенно разной направленности и с различными требованиями к управлению данными. Где-то Hibernate подходил лучше, где-то хуже. За время использования я изучил данный framework достаточно глубоко и нашёл немало недостатков, багов и недоработок, которыми и хочу поделиться с вами.
Инструмент далеко не универсален и повсюду раскиданы “грабли”, на которые наступают даже опытные разработчики. В докладе я не только расскажу о проблемах Hibernate, но и представлю способы их решения, обхода или изоляции.