Folia
← 返回头版

字节码到源代码行号的高效映射方案

在字节码虚拟机的实现中,如何有效地将字节码偏移量映射回源代码行号是一个关键技术问题。1针对这一需求,存在多种数据结构方案可供选择,各具不同的性能特点。

平行数组方案能在O(1)的时间内完成查询,但需要O(n)的内存空间。1游程编码方案则通过压缩相同行号的连续字节码段,实现O(r)的查询时间和O(r)的内存占用(其中r为游程数),顺序遍历时复杂度为O(n+r)。1起始偏移对方案采用二分查找可达到O(log r)的查询效率,顺序遍历为O(n)。1

在生产环境中,不同虚拟机采取了各异的实现策略。1JVM的LineNumberTable使用起始偏移表示法,并通过线性搜索来查找前驱记录。1相比之下,Lua则采用平行数组存储行号增量和绝对检查点。1


来源

  1. Hacker NewsBytecode-to-Source Mapping

评论