字节码到源码映射的优化之道
Bytecode-to-Source Mapping

在实现 Robert Nystrom 的《Crafting Interpreters》第 14 章挑战时,我深入探讨了虚拟机如何将字节码偏移量映射回源码行号。简单的并行数组方案虽然查找快但内存占用大,而游程编码虽节省空间却牺牲了随机查找性能。通过引入静态前驱问题(static predecessor problem)和起始偏移量记录,我们既能利用二分查找实现 O(log r) 的随机定位,又能通过游标遍历保持 O(n) 的线性扫描效率。文章还对比了 JVM 的 LineNumberTable 和 Lua 的增量存储策略,展示了不同虚拟机在内存与速度间的权衡智慧。
这种起始偏移量数据结构的美妙之处在于,我们不必在二分查找和游标遍历之间做选择,而是可以根据具体场景灵活采用任意一种方式。