Jmvx: Fast Multi-threaded Multi-Version eXecution and Record-Replay for Managed Languages
summary
Jmvx instruments Java bytecode to intercept native and nondeterministic library calls (found via strace signals), implements a lock‑free shared mmap ring buffer between JVMs, and enforces monitor ordering with a Lamport clock monitor ordering so multi-threaded MVX and RR tolerate JVM GC/JIT divergence. Evaluation shows MVX overhead averaging 5% when multithreading support is disabled and 47% when enabled, recording costs 8% (25%) and replay 13% (73%), and it beats RR’s 4.33x/4.7x costs with 1.25x/1.73x for record/replay.
AI-written summary · about
chapters (19)
- 0:00JMVX introduction and goals
- 1:04Record replay for debugging
- 2:06From replay to multi-version execution
- 3:09JMVX design for JVM complexities
- 4:12Nondeterministic Java APIs
- 4:55Instrumenting Java methods
- 5:56Class loading and concurrency handling
- 6:37Thread ordering with Lamport clocks
- 7:41Bytecode for synchronized methods
- 8:01Fast multi-threaded execution
- 8:23Divergences in program output
- 9:06JMVX instrumentation performance
- 10:08Record replay vs RR
- 10:50Chronicler multi-threaded comparison
- 11:55JMVX poor Lucene performance
- 12:38Ring buffer size impact
- 12:59Scaling with threads and benchmarks
- 13:41Key takeaways and capabilities
- 14:04Q&A
