Aleksey Shipilëv: One Stop Page

I work on Java, especially Java performance and concurrency, employed by Oracle now, where we are developing Oracle/Open JDK/Hotspot and other Java-related technologies. If you want to see me bragging about myself, look at my CV.

The resources below are the shortcuts to general goodness I share with the world. Don't hesitate drop me a message if you see anything wrong there. I usually post the updates for this page on Twitter: @shipilev.

Recent Articles and Blog Posts

  (ENG) Safe Publication and Safe Initialization in Java
Explores the "Safe Publication" and "Safe Initialization" idioms.
This post is a translation and an update for a very outdated Russian post.
  (ENG) On The Fence With Dependencies
Explores the better instruction selection from StoreLoad barriers. Recaps the JDK-8050147 work.
  (ENG) Java Memory Model Pragmatics
Describes what is actually written in JMM Spec. This is the transcript for "Java Memory Model" talks.
  (ENG) Java vs. Scala: Divided We Fail
Highlights how to analyze bottlenecks in benchmarks; and how to deal with multi-language benchmarks.
  (ENG) Nanotrusting the Nanotime
Unfolds why System.nanoTime() is bad for your health.
  (ENG) All Accesses Are Atomic
Quantifies the access atomicity costs.
(Work in progress)
  (ENG) All Fields Are Final
Quantifies the final fields memory semantics, in the wake of JMM overhaul.
(Work in progress)
  (ENG) The Exceptional Performance of Lil' Exception
Explores the performance magic behind Java exceptions.
This is an update for two quite outdated Russian posts: 1, 2
Caution: a long article.
  (ENG) What Heap Dumps Are Lying to You About
Rant about HPROF, and how it confuses the offline heapdump tools.
Shameless promotion of Java Object Layout @ OpenJDK
  (ENG) Plans for 2014
Semi-reflection on 2013, and what's going to happen in 2014.
(RUS) SettableFuture<V>: How To Shoot Oneself in the Foot with Spherical Bicycle in the Vacuum
(saved from rapidly deteriorating Habrahabr)
(RUS) PGP Web of Trust: graphs and basic estimations
(saved from rapidly deteriorating Habrahabr)
(RUS) Exploring Reflection on HotSpot
(saved from rapidly deteriorating Habrahabr)
(RUS) Exploring multiple dispatch on HotSpot
(saved from rapidly deteriorating Habrahabr)
(RUS) Estimating compression and deduplication ratios on real data
(saved from rapidly deteriorating Habrahabr)
(RUS) VisualVM: monitoring, profiling, and diagnostics for Java applications
(saved from rapidly deteriorating Habrahabr)

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.

# Performance Optimization 101
v3.0 (ENG) Devoxx 2012: Performance Methodology How-To
(co-presenter with Kirk Pepperdine)
Collaterals: Mindmap
Video: Direct, 1180 MB
Photos: BeJUG photostream
v2.0 (RUS) JUG.Ru (SPb): Performance Methodology How-To
Video: Direct, 451 MB
v1.0 (RUS) JavaOne Moscow 2012: How To Train Your Dragon: Attack The Scaling on Multicore Machines
Video: Youtube
(RUS) JEEConf 2012: Performance Methodology How-To
Video: Yandex
(RUS) JavaOne Moscow 2012: Performance Methodology Intro
Video: Youtube
(RUS) JavaDay SPB 2012: Performance Methodology Intro
# Benchmarking
Recommended reading order: start with 3.0, then jump to 4.0.
v4.1 (ENG) JVMLS 2014: Java Benchmarking
Includes the short versions of Nanotrusting the Nanotime and Java vs. Scala: Divided We Fail.
v4.0 (RUS) JEEConf 2014: Java Benchmarking, Timestamping Failures
Video: JEEConf, Direct: 351 MB
(RUS) JPoint 2014: Java Benchmarking, Timestamping Failures
v3.2 (RUS) CodeFest 2014: Java Benchmarking
v3.1 (ENG) Devoxx 2013: Java Microbenchmark Harness (JMH): The Lesser of Two Evils
v3.0 (ENG) Oredev 2013: (The Art of) (Java) Benchmarking
Video: Vimeo, Direct: 188 MB
(ENG) JVMLS 2013: JVM Benchmarking
Video: OTN, Direct: 968 MB
v2.0 (RUS) JavaOne Russia 2013: The Art Of Java Benchmarking II
Video (courtesy of JPoint): YouTube, high quality (444 MB)
v1.0 (ENG) JavaOne SF 2011: (The Art of) (Java) Benchmarking
(RUS) JavaDay Kiev 2011: (The Art of) (Java) Benchmarking
(RUS) JavaOne Moscow 2011: (The Art of) (Java) Benchmarking
# Quantum Performance Effects
v2.0 (ENG) JavaDay Riga 2013: "Quantum" Performance Effects
(hosted for Sergey Kuksenko)
v1.0 (RUS) JavaOne Russia 2013: "Quantum" Performance Effects
(hosted for Sergey Kuksenko)
Video (courtesy of JPoint): YouTube, high quality (514 MB)
# JDK 8, Lambdas
Streams:
v2.0 (ENG) JavaDay Riga 2013: JDK 8: Stream Style
(further modified by Sergey Kuksenko)
v1.1 (RUS) JEEConf 2013: JDK 8: Lambda Malleus
(modified by Sergey Kuksenko)
v1.0 (RUS) JavaOne Russia 2013, JDK 8: Lambda Malleus
Language:
v2.0 (RUS) JEEConf 2013: JDK 8: I, Lambda
(hosted for Sergey Kuksenko)
(RUS) JavaOne Russia 2013, JDK 8: I, Lambda
(hosted for Sergey Kuksenko)
Streams + Language:
v1.0 (RUS) JUG.Ru (SPb): Per Aspera Ad Lambdas
Video: Direct: part1, 704 MB, Direct: part2, 551 MB
# Concurrency Torture
v1.1 (RUS) Narnia, 2555: Java Concurrency, Battle for Correctness
Latest updated version, fixing a few bugs.
v1.0 (RUS) JEEConf 2013: Java Concurrency, Battle for Correctness
Video: JEEConf, Direct: 414 MB
(RUS) JavaOne Russia 2013: Bullet-Proof Java Concurrency
Video (courtesy of JPoint): YouTube, Direct: 431 MB
5min (ENG) JVMLS 2013: Breaking Concurrency Bad, or jcstress
# Fork/Join
v2.0 (RUS) JEEConf 2013: Fork/Join
(RUS) JUG.Ru (Spb): Fork/Join
Video: YouTube, Direct: 889 MB
v1.0 (RUS) JEEConf 2012: Fork/Join
Video: Yandex
(RUS) JavaOne Moscow 2012: Fork/Join
Video: Youtube
# Java Memory Model
HEAD (RUS) Narnia, 2555: Java Memory Model Pragmatics
(ENG) Narnia, 2555: Java Memory Model Pragmatics
Latest and greatest version.
v2.2 (ENG) JVMLS 2014: Java Memory Model Pragmatics
Workshop collaterals.
v2.2 (RUS) JEEConf 2014: Java Memory Model Pragmatics
Video: JEEConf, Direct: part 1, 364 MB, Direct: part 2, 365 MB
v2.1 (RUS) CodeFest 2014: Java Memory Model Pragmatics
v2.0 (RUS) JUG.Ru 2014: Java Memory Model Pragmatics
Video: Youtube, Direct: 1090 MB
v1.0 (RUS) JavaOne Russia 2013: Java Memory Model
(hosted for Sergey Kuksenko)
(RUS) JavaOne Moscow 2012: Java Memory Model
(hosted for Sergey Kuksenko)
Video: Youtube
(RUS) JavaDay Kiev 2011: Java Memory Model
(hosted for Sergey Kuksenko)
# Java Platform Performance BOF
v1.0 (RUS) JEEConf 2011: Java Platform Performance BoF
(RUS) JavaOne Moscow 2011: Java Platform Performance BoF
(RUS) JavaTechDay SPB, 2011: Java Platform Performance BoF
# Object Layout
v1.0 (RUS) JEEConf 2014: What Heap Dumps Are Lying To You About
Video: JEEConf, Direct: 414 MB
Collaterals: JOL, JOL Samples
(RUS) Joker 2013: What Heap Dumps Are Lying To You About
Video: Youtube, Direct: 497 MB
Collaterals: JOL, JOL Samples
# Assorted
v1.0 (ENG) JVMLS 2013: False Sharing, and @Contended
v1.0 (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

Apache Harmony
   Open-source implementation of Java 5 under APLv2.
   Parts of Harmony's class libraries are now parts of Android.
   Retired.

OpenJDK
   Open-source, Oracle-endorsed implementation of Java 8 under GPLv2 with CP exception.
   The most used Java runtime in the world.

Java Microbenchmark Harness (jmh)
   The microbenchmark harness used to drive most of our performance experiments.

Java Concurrency Stress Tests (jcstress)
   The harness and the set of functional tests to break Java implementations on concurrency front.

Java Object Layout (jol)
   The minimalistic tool box for field/object layout stuides.

Other projects on GitHub

Non-techical articles and toy projects

(ENG) XKCD-1110 full-view
(RUS) President Elections in Russia, 2012 (round 1): Data robots, and parsed data
(RUS) President Elections in Russia, 2012: Twitter dumps, and spamfiltering
(RUS) Parliament Elections in Russia, 2011: Data robots, and parsed data

Яндекс.Метрика