Investigating Managed Language Runtime Performance: Why JavaScript and Python...
summary
Careful measurements compare OpenJDK, Go, V8/Node.js, and CPython against GCC using six reimplemented apps called LangBench and intrusive bytecode-level instrumentation that counts cycles per instruction and isolates checks. Results show V8 averages 8.01x slower and CPython 29.50x slower than C++; OpenJDK and Go are near parity (1.43x and 1.30x). Removing V8 shape/bounds checks yields up to 7.9x speedups, G1 write barriers cause 10x slowdowns in sort until changed, GC compaction improves cache locality, and Go goroutines cut context switches so it scales across cores.
AI-written summary · about
chapters (14)
- 0:00Intro
- 0:54The Advantage of Managed Languages
- 4:20Interpreter Instrumentation
- 6:02Type and Bounds Checking Instrumentation
- 7:22Experiment Methodology
- 7:49Overview: Average
- 8:53Overview: Limited Scalability in V8 and CPython
- 9:20Overview: Runtime Advantages
- 10:21Runtime Overhead: Type and Bounds Checking
- 12:00Runtime Overhead: GC Write Barriers
- 13:01V8 and CPython Limited Scalability
- 15:04Runtime Advantages: GC Cache Locality
- 18:16Scalability: Go Key-Value Store
- 19:46Related Work
related talks
48mOne VM To Rule Them All
24mA Snapshot of the Performance of Wasm Backends for Managed Languages
31mSimplifying and Optimizing Life on the Edge with Graal
17mAST vs. Bytecode: Interpreters in the Age of Meta-Compilation
37mGraalVM for Polyglots: Harder, Better, Faster, Stronger?
41mVirtual Machines 101
54mWhat Lies Beneath
48mA journey to JVM Excellence: Navigating JDKs and JVMs
