elizarov


Блог Романа Елизарова


Entries by tag: java

JPoint 2016: Слайды и ссылки
elizarov

JPoint Logo Большое спасибо организаторам конференции JPoint 2016. Конференция получилась отличная, хорошая подборка докладов. Слайды моего доклада "Wait for your fortune without blocking" я уже выложил здесь.

JPoint Student Day тоже получился ничего, хотя и народу было не очень много. Cлайды с доклада "Многопоточное Программирование — Теория и Практика" выложены здесь.

Тем, кто желает углубиться в теорию многопточного программированию, рекомендую ссылки с дополнительным чтением из своего старого обзора на эту тему. Несмотря на то, что этот доклад был более развернутым и содержал интересные практические примеры, теория она вечна — фундаментальные работы Лампорта и Херлихи актуальны и по сей день.


Анонс: JPoint 2016: Снова про многопоточное программирование
elizarov

После продолжительного перерыва я снова появлюсь на публике. Больше года я не выступал ни на каких технических конференциях. Этому была вполне уважительная причина, ибо я занимался изучением Финансовой Математики (aka Quantitative Finance). Более подробно эта тема раскрыта в моем недавнем интервью JUG.RU в цикле "Без Слайдов". Теперь всё это позади. Знания получены, экзамены сданы, я получил официально право "to use the CQF designation letters after my name". Но бросать программирование и идти управлять рисками в какой-нибудь банк я пока не планирую. Теперь я снова буду нести свет знаний многопоточного программирования в массы.

JPoint Logo В этом году на конференции JPoint 2016, которая пройдет в Москве 22-23 апреля, я сделаю не "научно-популярный" доклад, а наоборот. Это будет узко-специализированный доклад про мало известную, но порой очень полезную штуку из области синхронизации без блокировок. А именно, как совместить необходимость "усыплять" потоки до наступления какого-либо события с синхронизацией без блокировки, который мы частенько занимаемся ради пресловутой производительности. Но ведь ожидание чего-либо это и есть блокировка? Так? А вот и не так! Более подробно об этой я и расскажу на 2-м дне конференции в докладе под кодовым названием "Жди своего счастья без блокировки!".

Будет и научно-популярный доклад "Многопоточное программирование — Теория и Практика", по мотивам моего доклада на JPoint 2-х летней давности (но с практическими примерами!). Я его сделаю в рамках JPoint Student Day. Это отдельный день (24 апреля), в который пройдет специальная конференция для студентов, еще лишь открывающих для себя дорогу в мир профессионального программированию. Эта как раз та аудитория, которой нужно не столько дать конкретные знанию про ту или иную технологию (ибо технологии поменяются десяток раз в процессе их будущей профессиональной деятельности), сколько рассказать фундаментальные вещи и факты, которые на всю жизнь. А еще, что более важно, их нужно заинтересовать учиться самим. Именно поэтому, в конце доклада я буду рекомендовать прочитать замечательную книгу M. Herlihy. The Art of Multiprocessor Programming. 2012, про которую я в своем время даже отдельно писал. Жаль, что перевода её на Русский так и нет (может кто-нибудь занимается издательской деятельностью и посодействует это исправить?).


Конференция Joker и свежая версия Aprof
elizarov

Во вторник, 21 Октября, я буду выступать в Санкт-Петербурге с докладом на конференции Joker. И буквально на этой неделе я снова столкнулся с темой доклада напрямую. А тема такая. Очень часто проблемы производительности реальных Java приложений под нагрузкой происходят из-за слишком большого количества генерируемого при работе мусора в памяти. Доклад называется "Почему GC съедает все моё CPU?". На нем я как раз об этом и расскажу со всеми подробностями. Акцентирую вниманеие в чем отличие в этом плане Java от других языков типа С/C++. Вот вам спойлер: неэффективный код одинаково легко написать на любом языке, но методики поиска проблем имеют свои специфики. А на Java мы пишем очень, очень большие приложения и когда они начинают тормозить, то для поиска в них узких мест без специальных инструментов не обойтись. Вот, например, на открытии торгов в одном из компонентов системы более 30% CPU уходит на сборку мусора. Как найти виновника?

Львиная доля доклада как раз будет посвящена инструменту, который мы, в Devexperts, разработали для поиска проблем с излишним мусором — Aprof. Я его уже упоминал в других докладах: в DIY Java Profiling в 2011 году он явно упоминался, а в Миллионах котировок в секунду он проскакивал, так как без контроля за выделением памяти действительно высокопроизводительную систему просто не сделать. Наконец-то я раскрою эту тему в полной мере. Расскажу как пользоваться Aprof-ом и как интерпретировать полученные результаты. Объясню как он устроен, что же именно он замеряет, как он это делает, и какой эффект на производительность целевого приложения это оказывает. Не обойду вниманием и связанные со всей этой темой фишки HotSpot — его умение выделять объекты на стеке устранять выделение памяти под объекты.

В процессе подготовки доклада я навел порядок и в исходниках самого Aprof-а. Они получили место постоянной прописки на GitHub по адресу https://github.com/devexperts/aprof (безусловно, их копия живет и в нашем корпоративном git репозитории). Обновил используемую версию ASM до 5.0.3. Теперь поддерживается Java 8. Выпустил свежий релиз Aprof. Теперь последнюю версию можно скачать с Bintray:

UPDATE: Тут читатели меня правильно поправляют, что некорректно говорить о том, что HotSpot умеет выделять объекты на стеке. Он вообще устраняет выделение памяти под объекты, если есть такая возможность.

UPDATE2: Слайды с доклада под катом.Collapse )


Развернутый комментарий про теоретико-параллельный доклад на JPoint 2014
elizarov

На доклады на конференции JPoint 2014 в Москве было выделено по 45 минут. Что можно рассказать за 45 минут из теоретического курса параллельного программирования, который, по-хорошему, занимает целый семестр? Цель моего доклада заключалась в том, чтобы дать слушателям минимально необходимую теоретическую базу, которая позволит прочитать и понять 17-у главу спецификации языка Java (JLS), которая четко регламентирует допустимое поведение многопоточных программ на Java на любой архитектуре CPU. Это значит, что программисту на Java не обязательно разбираться в подробностях и деталях реализации кэшей, протоколов когерентности, параллелизма на уровне инструкций, специальных инструкций и барьеров, как и других особенностей различных архитектур. Это задача для тех, кто пишет JVM или хочет написать самый быстрый код. Программист на Java может писать корректные многопоточные программы, если он четко понимает, какие исполнения его многопоточного кода допустимы с точки зрения спецификации языка Java.

В качестве основной идеи доклада я выбрал тот неочевидный факт, что, в общем случае, поведение многопоточных программы нельзя изучать путем анализа различных перестановок выполняемых операций. Я отобрал основные определения и объяснил суть последовательной согласованности и линеаризуемости, чтобы подвести к этому факту. Из-за технических накладок с трансляцией организаторы попросили задержать начало доклада, из-за чего на доклад осталось около получаса, и его кульминационная концовка была несколько смазана. В этой записи я еще раз развернуто объясню основную идею и дам ссылки для домашнего чтения тем, кому хочется в этом подробней разобраться. ДальшеCollapse )


Анонс: JPoint 2014: Теоретический минимум, который надо знать, чтобы понять JMM
elizarov

В последнее время на Java конференциях стало появляться множество докладов, которые рассказывать про особенности многопоточного программированию в целом и про Java Memory Model (JMM), которая описана в 17-й главе спецификации языка Java (JLS).

Это не удивительно. В то время как многоядерные процессоры используются уже даже в телефонах, в тех областях программисткой деятельности, где для достижения преимущества над конкурентами надо победить в производительности, без многопоточного программирования не обойтись. И одной передачей сообщений без изменения общей памяти тут не обойтись. Чтобы выжать из современных вычислительных систем всё, что в них заложено, нужно использовать их по максимуму. Это значит, что придется разобраться не только в синтаксисе и семантике вашего языка программирования, как это было всего десять лет назад, но и в его модели памяти. Разобраться, что же происходит, когда несколько потоков одновременно читают или пишут одни и те же участки памяти.

И тут смелого программиста, отправившегося на поиски новых знаний, ждет неприятная новость. В то время, как практически в каждом вузе, будущего программиста обучают основам построения компиляторов, дают необходимый теоритический минимум, который позволяет разобраться в синтаксисе и семантике любого современного языка программирования, практически никто не учит теоритическим основам параллельных вычислений. С такими словами как «произошло до» и «последовательная согласованность» программист первый раз в жизни сталкивается, когда пытается разобраться в том, что такое «гонка данных», почему она происходит в его коде, и почему из-за этого его код не работает. Примерно как если бы, человек севший писать код на новом языке программирования и изучать его синтаксис и семантику, не знал бы что такое «регулярное выражение», «лексический анализ» и «нотация Бэкуса-Наура».

18 Апреля в Москве пройдет конференция JPoint 2014. На ней я сделаю доклад, который призван восполнить этот досадный пробел современной системы образования программистов, не успевшей еще, в своей массе, подстроиться под реалии многопоточного мира. Там будет минимум практики и максимум теории. Определения, понятия, теоремы. Прослушав этот доклад все термины, которые упоминаются в 17-ой главе JLS, обретут для слушателей понятный и законченный смысл.

Этот доклад будет сделан на основе моего доклада 2012 года "Теория параллельного программирования для программистов практиков". Тот доклад наглядно показал, что нельзя объять необъятное. Попытка впихнуть в отведенное слишком много приводит к тому, что большая часть слушателей так и остается в неведении. Я не буду больше пытаться совмещать теорию и практику, а начну с самых базовых теоритических основ. И не просто пробегусь по верхам, создав максимальную плотность определений в единицу времени, а попытаюсь донести до слушателей суть и смысл всех понятий, используя примеры и диаграммы.

UPDATE: А вот и развернутый комментарий о прошедшем докладе со слайдами с ссылками.


Анонс доклада: Факты и заблуждения о Java-сериализации
elizarov

Serialization ... is the process of translating data structures or object state into a format that can be stored (for example, in a file or memory buffer, or transmitted across a network connection link) and resurrected later in the same or another computer environment.

Wikipedia

Во вторник, 15 октября, на конференции по Java-технологиям Joker, которая пройдет в Санкт-Петербурге, я сделаю доклад про Java-сериализацию.

Тема сериализации объектов волнует любого, кто разрабатывает распределённые системы. При использовании разных языков и технологий для разных частей системы выбор протоколов сериализации ограничен в первую очередь необходимостью обеспечить совместимость технологий между собой. Однако, серверная часть многих больших современных приложений разрабатывается на Java и состоит из множества взаимодействующих компонент. Это даёт возможность при выборе механизма сериализации концентрироваться на производительности и удобстве разработки.

Java-сериализация является неотъемлемой часть платформы Java уже более 10 лет. Она разрабатывалась еще в те времена, когда дальнейшая судьба развития распределённых систем была туманна. Многие технологии «распределённых объектов», разрабатывавшиеся в то время, не дожили до наших дней, и некоторые отголоски этих мёртвых идей можно еще откопать в дизайне Java-сериализации. Несмотря на ряд недостатков, сериализация в Java имеет ряд неоспоримых преимуществ перед многими альтернативными способами реализации. Альтернативные способы сериализации активно рекламируются, в то время как старая добрая Java-сериализация незаслуженно забывается и обрастает совсем уж гротесковыми мифами. Например, как в любой шутке, в первоапрельской шутке JEP-154 есть и доля правды о том, что думают разработчики про Java-сериализацию.

В докладе будут рассмотрены наиболее популярные заблуждения о Java сериализации, и разложены по полочкам реальные факты о её достоинствах и недостатках, которые вы не услышите от авторов альтернативных библиотек сериализации. Вы узнаете как использовать Java-сериализацию и получать от этого удовольствие!

Конечно, в докладе будут упомянуты и альтернативы, ведь любой выбор технологий должен быть основан на осознанном сравнении. Сейчас существует очень большое количество алтернатив, и здесь мне нужна ваша помощь. Пишите в коментарии к этой записи о том, какие библиотеки сериализации вы использовали, изучали, или с какими сталкивались в своей практике. Работающие со своим форматом сериализации или с каким-либо другим стандартом, бинарные или текстовые, JSON или XML, кроссплатформерныие или работающие только в Java, оптимизированные для записи в файл или для вызова методов по сети. Я их добавлю к списку известному мне и упомяну обо всех из них без исключений.

UPDATE: А вот и слайды под катомCollapse )


JavaOne: Открытие, ключевые темы
elizarov
Вчера состоялось открытие очередной конференции JavaOne. Основные темы, на котрых были расставлены акценты в открывающей речи, это встроенные системы (embedded) и скорый выход очередной версии Java - Java 8.

В области встроенных Java систем Oracle сильно продвинулась за последние несколько лет. Был выпущен полноценный JDK под популярные в мире встроенных систем Linux системы на ARM процессорах. Совсем недавно появилась "HardFloat ABI" версия, которая позаволяет запускать Java приложения на Raspberry Pi без лишних телодвиженией. В этом году спонсорами и партнерами конференции являются ARM, Freescale, Qualcomm, RaspberyPi, Gemalto и ST. Очень важно, что происходит конвергенция "маленьких" JVM и "больших" JVM. Многие современные устройста достаточно мощные чтобы запускать полноценную JVM (ARM Linux версия), а в версии Java 8 появится рад стандартных компактных профилей, представляющих подмножество библиотек классов, уменьшая размер и необходимый объем памяти. В то же время для сильно ограниченных систем уже давно существует Java ME, которое более 10 лет даже не поддерживало новые возможности языка. С выходом "большой" Java SE 8 появится и Java ME 8, которая приведет в соответствие уровень поддерживаемого языка со своим большим братом.

Java 8 станет действительно революционной версией языка. Такого не было уже 10 лет с момента выхода Java 5. Наконец в Java появляются closures aka lambda. Одновременнно с этим происходит модернизация всех стандартных библиотек коллеций, позволяющая работать с данными концентрируясь на стоящей задаче, без необходимости использования шаблонного кода. Java выступает догоняющим и станет последним широко-распространенным языком в котором появляются closures. Про важность этих изменений уже написано очень много. Очень радует, что после многолетних дебатов был выбран элегантный синтаксис, который естествено вписывается в язык Java, и высокопроизводительная реализация, которая позволит сделать существующий код и компактней и быстрей при переходе на Java 8. Немаловажно и то, что новые методы работы с коллециями с самого начала разработаны с учетом параллельной обработки данных. Переход с последовательной обработки данных на параллельную происходит простой заменой вызова метода stream на вызов метода parallelStream. Все это уже доступно для разработчиков в полнофунциональной developer preview версии здесь.

Во время открывающей речи не был забыт и JavaFX следующая версия которого выходет в составе Java SE 8 и будет называться JavaFX 8. Основным нововведением будет поддержка 3D графики. Основные инновации в развитии "rich UI" происходят именно в JavaFX, но и про поддержку миграции со старых технологий Oracle не забывает. Появится возможность встраивать Swing компоненты в JavaFX (в обратную сторону можно уже сейчас).

Был упомянут и вышедший недавно Java EE 7. В качестве технологической демонстрации было показано Java EE приложение для игры в шахматы по сети, в котром клиенты взаимодействуют с сервером через websocket получая push нотификации с ходами от сервера. NetBeans позволяло отлаживать одновременно серверный Java код и клиентский JavaScript. Кроме JS/HTML5 клиента с этим серверным приложением работало простое 3D JavaFX приложение запущенное на любопытном do-it-yourself Rasperry Pi планшете под названием DukePad, полнценное JavaFX приложение на ноутбуке с красивой 3D анимацией шахматных фигур професионально сделанное в Maya, и робот управляемый встроенной Java системой который переставлял физицеские фигурки по реальной шахматной доске. Демонстрация прошла без существенных накладок и аудиторя была довольна увиденным.

JavaOne Moscow 2013
elizarov
На этой неделе я побывал в Москве на JavaOne Moscow 2013. Сделал доклад "Миллионы котировок в секунду на чистой Java" аналогичный своему выступлению в Санкт-Петерурге на JUG. Однако, здесь был всего час времени и доклад получился урезанный по содержанию по сравнению с предыдущим. Надо сказать, что я планировал урезать доклад "по глубине" (то есть не вдаваться глубоко в подробности и лирику, а пробежаться по верхам), но не получилось. Это, в общем, побочный эффект того, что для этого доклада я готовил презентацию в том стиле, когда презентация не содержит дословный текст и содержимое рассказа, а лишь подчеркивает основные мысли, которые хочется донести до аудитории (крупным текстом), в то время как основное пояснение дается голосом.

Конференция продолжалась два дня, но я на неё приехал всего на один день, 24 Апреля, когда был назначен мой доклад и успел послушать не много других докладов. Больше всего мне понравился доклад "Пуленепробиваемый Параллелизм Java", сделанный Алексеем Шипилёвым shipilev. Он рассказал и показал на конкретным примерах ошибки связанные с многопоточностью, которые обнаруживаются в JVM, JDK и в железе. Поделился методологией, которую они используют для написания тестов на поведение кода при одновременной работе множества потоков, чтобы проверять весь стек на соответветсвие модели памяти Java (JMM). Обещал, что написанный каркас для разработки аналогичных тестов будет открыт.

Стоит упомянуть и доклад "Exploring JavaFX 3D", сделанный Джеймсом Уивером. Он показал рабочие примеры кода для вывода 3D-графики, которая появится в следующей версии JavaFX, которая выйдет в составе JDK 8. Джеймс говорил медленно, боясь что аудитория его не поймет. Однако доклад был в достаточной мере насыщен демонстарциями работающего кода, чтобы быть не скучным. У команды JavaFX получается вполне элегантный, мощный и достаточно производительный API для обогащения интерфейса приложений 3D графикой.

Лытдыбр: Выбирая билеты в Москву я не обратил внимание на место проведения конференции. Я привык что в Москве мне всегда нужно в центр, а Аэроэкспресс с любого аэропорта приезжает в центр на кольцевую линию метро, откуда быстро можно попасть в любое центральное место, и не важно в какой аэропорт ты прилетел. Более того, из-за Московских пробок Аэроэкспресс+Метро почти всегда быстрей такси. Я привычно выбрал Домодедово в том числе из-за того, что там ближе всего идти до станции Аэроэкспресса, хотя его перегруженность людьми уже стала напрягать. Уже в аэропорту Пулково я посмотрел на место проводения конференции и на карту Москвы, и осознал, что конференция проходит в Крокус Экспо, сразу за МКАД-ом, и симметричность относительно разных аэропортов жестко нарушается. Если бы я полетел через Шереметьево, то сэкономил бы на дороге туда и обратно не меньше часа времени, взяв такси.


Краткий отчет: Миллионы котировок в секунду на чистой Java
elizarov

Появились слайды с моего доклада Миллионы котировок в секунду на чистой Java. Встреча получилась долгой. Было много интересных вопросов. Большое спасибо всем, кто их задавал. Многое я рассказывал не со слайдов. Основные акценты, конечно, все есть на слайдах, но пояснения к ним я давал голосом.

UPDATE: На сайте Лекториум появилось и видео.

Слайды доступны по ссылке: Millions quotes per second in pure java.

А видео прямо здесьCollapse )


Миллионы котировок в секунду на чистой Java
elizarov

В четверг, 28 февраля, в Петербурском офисе компании Oracle я раскажу о том, как проект dxFeed в компании Devexperts справляется с получением, обработкой, нормализацией, хранением и передачей миллионов котировок в секунду, при том что весь код написан 100% на Java.

Платформа Java имеет массу особенностей, которые, с одной стороны, делают её идеальным выбором для создания больших и сложных систем, но, с другой стороны, заставляют искать специфические подходы и шаблоны для написания высокопроизводительного кода. Этот доклад будет посвящён выделению объектов и сборке мусора, структурам данных и особенностям объектной модели Java, преимуществам и недостаткам компиляции машинного кода «на лету» — в общем, всему тому, чего нет в языках низках уровня типа C и C++ и что необходимо понимать и учитывать при реализации высоконагруженных систем на Java.

Полный анонс и регистрация на участие здесь

UPDATE: Краткий отчет о встрече, обсуждение, и слайды здесь


?

Log in

No account? Create an account