Die Hard - Defeating a Java compiler bug IS an Xmas story
summary
A Java compiler bug breaks reproducible classfile output by producing different permit-list ordering for a sealed interface depending on input-file order, which makes remote build cache miss and inflates builds from about 3 minutes to 40 minutes for the repo in question. Diagnosis uses javap, diffed classfiles and custom JDK with extra logging, and a minimal reproducer shows deterministic failure conditions; the defect is fixed and queued for a JDK release.
AI-written summary · about
chapters (19)
- 0:00Introduction to the talk
- 1:13Speaker's background and focus
- 2:18Die Hard analogy and context
- 4:04Build caching theory explained
- 8:03Discovering the build cache issue
- 11:18Non-deterministic Java compiler behavior
- 13:30Impact on build performance and productivity
- 14:37Investigating sealed interfaces and records
- 17:07Initial bug reporting and analysis
- 18:33Java compiler determinism expectations
- 20:19Exploring Gradle and annotation processors
- 21:25Key discovery: record order differences
- 22:29Debugging with custom JDKs
- 23:35Confirming the Java compiler bug
- 25:02Fix attempt without root cause
- 26:51Gradle incremental compilation check
- 27:56Minimal reproducer created
- 29:43Bug resolution and future release
- 30:51Closing remarks and thanks
related talks
21mUnderstanding and Finding Java Decompiler Bugs
58mPractical Java Problem Solving: A Hands-On Guide to Debugging
42mHow a Two-Decade-Old Issue Still Haunts Software Scalability
43mDon't hack the JVM? ☠️💣💥
58mDebugging #Java
01h 00mon Java - Historical Oddities & Persistent Itches
53mHacking Java
45mA Healthy diet for your Java application
