A deep technical talk from JVMLS exploring the meaning of 'static' and 'dynamic' in the context of the JVM. The speaker traces the etymology of both terms, then builds a conceptual framework: static analysis is a dry run of an abstracted model used to make decisions that constrain future dynamic execution. Key JVM mechanisms are examined through this lens — JIT compilation, deoptimization, invokedynamic, bootstrap methods, class loading, and AOT caching (Leyden). The talk also covers why full static analysis is fundamentally limited (halting problem, Rice's theorem), why 'cheating' (JIT, speculation, deoptimization) is necessary and valid, and how future JVM features like lazy statics, MINDs, and the parametric VM extend the static/dynamic interplay. Functional programming's immutability and single-assignment memory are framed as cures for the von Neumann bottleneck.
Sort: