The Cycling Tour – Java's Fraught Relationship with Cyclic Object Graphs
summary
Shows five concrete failure modes: modules and class inheritance cycles are rejected at load time, but static class initialization cycles produce partially initialized fields, surprising values and NPEs; equals/hashCode/toString on cyclic object graphs cause StackOverflow or OOM; Java serialization uses an identity object table and back‑refs so direct references survive, but deserialization breaks when code relies on object state (hashCode used by collections) leading to corruption or NPE. Recommends remove heavy work from static initializers, use post‑init/DI, mark transient or use custom readObject/writeObject with validation; diagnostic flag: -Xlog:class+resolve=trace.
AI-written summary · about
chapters (17)
- 0:00Introduction
- 1:04Graph theory basics
- 5:44Module cycles
- 6:25Class hierarchy cycles
- 7:49Class initialization cycles
- 10:40Static initialization demo
- 14:33Static initialization pitfalls
- 17:45Diagnosing initialization issues
- 21:13Equals and hashCode cycles
- 23:19Collections and cycles
- 26:33Serialization overview
- 27:16Serialization cycle problems
- 31:58Serialization demo
- 36:12Deserialization pitfalls
- 41:15Fixing serialization issues
- 44:08Summary and advice
- 49:27Future of serialization
related talks
47mA Modern Fairy Tale: Java Serialization
40mJava Puzzlers, Strange Loop Edition
41mDesigning Great Java In-Memory Object Models
42mHow a Two-Decade-Old Issue Still Haunts Software Scalability
53mWhy We Hate Java Serialization And What We're Doing About It
45mA Healthy diet for your Java application
51mA Healthy diet for your Java application
41mJava Serialisation: A Modern Fairytale
