Aleksey Shipilëv: One Stop Page

Quick Bio

Or, "the text I keep copypasting around conferences", therefore written in third person.

If you want to see me bragging about myself in more detail, look at my CV.



(This picture can be used as conference avatar, click for larger version) (ENG) Aleksey is working on Java performance for 10+ years. Today he is employed by Red Hat, where he does OpenJDK development and performance work. Aleksey develops and maintains a number of OpenJDK subprojects, including JMH, JOL, and JCStress. He is also an active participant in expert groups and communities dealing with performance and concurrency. Prior joining Red Hat, Aleksey was working on Apache Harmony at Intel, then moved to Sun Microsystems, which was later consumed by Oracle. (RUS) Алексей работает над производительностью Java больше 10 лет. Сегодня он работает в Red Hat, где разрабатывает OpenJDK и работает над его производительностью. Алексей разрабатывает и поддерживает несколько под-проектов в OpenJDK, включая JMH, JOL, и JCStress. Алексей также активно участвует в экспертных группах и сообществах, работающих над вопросами производительности и многопоточности. Перед тем как перейти в Red Hat, Алексей работал над Apache Harmony в Intel, а затем перешёл в Sun Microsystems, которая была поглощена Oracle.

The resources below are my major Internet footprint. Don't hesitate to drop me a message if you see anything wrong there. I usually post the updates for this page on Twitter: @shipilev, and that is about it. Please do NOT send the project-related questions to my personal email -- use project mailing lists for that!

Binary Builds

Some of my personal CI servers publish the binaries, workspace tarballs, and patches for the projects I am interested in. You can find those things at builds.shipilev.net. Please note those builds are not well-tested, not virus-checked, may contain horrible bugs that could lead to data corruption, engulfing machines in flames, selling your firstborns at eBay, etc. etc. etc. everything that applies for binaries^W code^W anything downloaded from the Internet. Be cautious. If in doubt, build from source yourself, and/or run on staging environment that is not painful to restore.

Additionally, Docker Hub contains some of the images built from those binaries. For example, this quickly bootstraps Shenandoah GC enabled image:

$ docker run -it --rm shipilev/openjdk-shenandoah:8 java -XX:+UseShenandoahGC -version openjdk version "1.8.0-force" OpenJDK Runtime Environment (build 1.8.0-force-sobornost-builds.shipilev.net-shenandoah-jdk8-b291-aarch64-jdk8u181-b15) OpenJDK 64-Bit Server VM (build 25.71-b291-aarch64-jdk8u181-15, mixed mode)

Recent Posts

Public Talks

The talks are arranged in themes. Many talks were given over multiple years, choose the most recent one. All other versions are kept for reference.

# Shenandoah GC Bleeding-edge in English (ENG) Slides Delivered at JUG Berlin-Brandenburg in September 2019. Work in progress. Latest in English (ENG) Slides (ENG) Video (cached here)

(ENG) Video (Vimeo) The major problem for large Java applications is G... (wait for it...) C pauses. Large heaps storing lots of live data, the failure to adhere to generational hypothesis, fragmentation due to old objects coming and going, exacerbate the issues even more. OpenJDK GCs managed to solve the first large part of the puzzle, concurrent marking — the ability to estimate the object reachability graph without stopping the application for a long time. Shenandoah is the new low-pause collector that tries to solve the second large part of the puzzle — the ability to move the objects without stopping the application, cutting the GC pauses even more. This talk is the basic introduction in Shenandoah's design choices, important internal details, performance benefits and trade-offs. Latest in Russian (RUS) Слайды (RUS) Видео (YouTube) -- быстрее и кратче (конференция)

(RUS) Видео (YouTube) -- длиннее и подробнее (JUG) Одна из главных проблем больших Java-приложений — это cбо... рка мусо... ра. Хранение больших куч данных, активно фрагментирующие приложения и прочие выпадающие из гипотезы о поколениях нагрузки приносят ещё больше проблем. Промышленные GC давно решили первую большую часть проблемы сборки, concurrent marking — выяснение графа объектов без долгой остановки приложения. Shenandoah — новый сборщик мусора, который пытается решить вторую большую часть головоломки, а именно перемещение объектов без остановки приложения, тем самым сбивая паузы ещё больше. Этот доклад об особенностях дизайна и реализации Shenandoah, достоинствах, которыми можно гордиться, и недостатках, с которыми приходится мириться.

# Shenandoah GC (part II) Latest in Russian (ENG) Slides (RUS) Видео (копия)

После того, как мы разобрались с главными фазами и превратили их в конкурентные, паузы в основном стали определяться более короткими, но всё равно зачастую stop-the-world активностями между большими конкурентными эпохами. В них придётся заниматься всяким: сканировать GC roots, взаимодействовать с языковыми фичами, которые в курсе про существование GC (например, weak references), разбираться с проблемами в реализации safepoint-ов, менеджить память и как-то делиться ей с ОС и т.п. Этот доклад ныряет в кроличью нору проблем, с которыми вынужден столкнуться низкопаузный GC вроде Shenandoah, размышляет, что можно сделать с этими проблемами на уровне JVM, а также над тем, что могут предпринять предусмотрительные разработчики низкопаузных Java-систем, зная об этих граблях.

# Performance (Keynote) Latest in Russian (RUS) Слайды (RUS) Видео (YouTube)

(RUS) Транскрипт Оптимизация производительности бередит умы опытных разработчиков с начала компьютерных времён. В коллективном бессознательном оптимизация — это то, что делает программирование интересным, конференции раскупаемыми, личный послужной лист — золотым. В этом обзорном докладе мы поговорим об оптимизации больших/инфраструктурных проектов (к примеру, OpenJDK): общих принципах, тенденциях и соотношениях; жизненном цикле проекта и экономике оптимизаций; роли и жизненном цикле тестов производительности; типичных ловушках, разногласиях и противоречиях, в которых оказываются оптимизационные задачи в крупных проектах.

# VarHandles Latest in Russian (RUS) Видео (YouTube) (RUS) Слайды sun.misc.Unsafe уйдёт и МЫ ВСЕ УМРЁМ! В этом докладе мы посмотрим на работы вокруг VarHandles (JEP 193): что там за API, как в крупную клетку устроена референсная реализация, какие новые режимы доступа (acquire/release, opaque/relaxed, compareAndSet/compareAndExchange) она даёт, и как мы умудряемся её скомпилировать в практически голые доступы. Кроме того, мы посмотрим на то, какой Unsafe плохой, какие грабли нам подкладывают текущие JDK/JVM, какие хардварные проблемы подтачивают красивый гранит реализации. С позитивной стороны мы увидим побочные улучшения в JDK/JVM: оптимизации в ByteBuffers, Atomic*FieldUpdaters, и прочие общие кодогенерационные улучшения.

# Java Memory Model, Unlearning Experience Latest in English (ENG) Video (cached)

(ENG) Video (YouTube) (ENG) Slides This talk is another attempt at explaining the Java Memory Model (JMM). This time we would assume people come to concurrency world with their preconceptions how the world works, and conjecture that is the major reason learning the low-level concurrency is hard for them. Therefore, rather than explaining what JMM is, we would try to see what JMM is not, and this should eliminate a few misconceptions about the Java concurrency at large. This would be the unlearning experience! The talk would try to build simple intuitive rules that we can use every day, and would try to outline the proofs one could employ to verify those rules. We shall also see surprising behaviors that are allowed by JMM, but not by naive (mis)interpretations of it. Prerequisites: the talk assumes the audience understands basic JMM, at least on the level of "JMM Pragmatics". Understanding more advanced topics, like the ones discussed in "Close Encounters of The Java Memory Model Kind" would be a plus.

# Java Memory Model, Close Encounters Latest in Russian (RUS) Video (YouTube) (RUS) Слайды Со времён «Прагматики Java Memory Model» прошло больше двух лет. Но даже у изучавших прошлый доклад специалистов остались странные предубеждения, не подкреплённые спецификацией. В этом докладе мы попытаемся разобрать и развенчать часть этих предубеждений: про всемогущие барьеры, про реордеринги, про недосинхронизацию и другое недовелосипедостроение. Доклад основан на уже опубликованной статье, и будет включать себя наиболее вкусные примеры. Доклад не будет останавливаться на базовых принципах модели и поэтому требует понимания JMM как минимум на уровне «Прагматики JMM».

# java.lang.String Catechism Latest in English (ENG) Video (YouTube)

(ENG) Slides Hardcore enterprise solutions, as well as other products, normally deal with large amount of text data. Those applications spend considerable time and memory to mess with Strings. It had been repeatedly shown that optimizing String usages will almost always give the immediate performance boosts. This is not to mention dodging OutOfMemoryErrors and the like. In this talk, we will revisit the basic sins of working with Strings: gluttony of concatenation, wrath of substrings, greed of interning, pride of deduplication et cetera. We will also see the costs of sloth, believing JVM Almighty will do all the work for us. Latest in Russian (RUS) Video (YouTube)

(RUS) Слайды В приложениях кровавого энтерпрайза и прочих продуктах, что так или иначе связаны с обработкой текстовых данных, порядочное количество памяти и времени тратится на возню со строками. Оптимизации работы со строками часто дают немедленный выигрыш, а то и уворачивание от OutOfMemoryError. В этом докладе будут рассмотрены основные пороки работы со строками: чревоугодие конкатенации, блуд подстрок, корыстолюбие интернирования, гордыню дедупликации и прочее. Кроме того, речь пойдет о том, чего стоит излишняя надежда на JDK и JVM. Historical (e.g. outdated) materials None yet!

# Compress Me Tightly Latest in Russian (RUS) Видео (YouTube)

(RUS) Слайды Контроль над использованием памяти — это ключ к написанию высокопроизводительного софта. В этом докладе мы покопаемся в кишках JVM и JDK, в поисках того, как сама платформа пытается сэкономить на памяти. Посмотрим на упаковку заголовков и полей объектов, сжатие указателей, учёт ссылок между поколениями в куче, трюки в сгенерированном коде, кэш автобоксинга и т. п. Всё это обильно сдобрим описанием возможных граблей и измерениями производительности. Historical (e.g. outdated) materials (RUS) JPoint 2015: Compress Me Tightly

# Quantum Performance Effects

(ENG) JavaDay Riga 2013: "Quantum" Performance Effects

(hosted for Sergey Kuksenko)

(RUS) JavaOne Russia 2013: "Quantum" Performance Effects

(hosted for Sergey Kuksenko)

Video (courtesy of JPoint): YouTube, high quality (514 MB)

# Java Platform Performance BOF

(RUS) JEEConf 2011: Java Platform Performance BoF

(RUS) JavaOne Moscow 2011: Java Platform Performance BoF

(RUS) JavaTechDay SPB, 2011: Java Platform Performance BoF

# Assorted

(ENG) JVMLS 2013: False Sharing, and @Contended



(ENG) JavaOne SF 2011: Java or C++, Practical Advice You Can Use

(co-presenter with Sergey Kuksenko and Charlie Hunt)

Video: Parleys

Papers



(ENG) SPECjbb2012: Updated Metrics for a Business Benchmark @ ACM/ICPE, Boston, April 22-25, USA

Projects

Non-techical articles and toy projects