代码之家  ›  专栏  ›  技术社区  ›  Nickolay

计算方法的字节码大小

  •  1
  • Nickolay  · 技术社区  · 8 年前

    目前,我正在使用 ASM library 。通过此库计算方法大小的唯一方法是 manually increment 每次指导访问时都会出现一些大小变量,这在我看来有些错误。有没有另一种常用的方法来计算方法字节码大小?或者每个指令的大小计算是否足够合理?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Holger    8 年前

    手动添加指令大小不适用于ASM,因为ASM专注于处理指令,并方便地隐藏不同形式的语义相同的指令。

    例如 ALOAD_0 (一个字节), ALOAD  0 (两个字节),以及 WIDE ALOAD  0 (四个字节)具有相同的含义,并报告给 MethodVisitor 通过a visitVarInsn(Opcodes.ALOAD, 0) 呼叫然后,在处理此指令时,您不必关心不同的表单,但您不知道原始类文件中存在哪一个表单。

    因为ASM不提供API来直接处理 Code 属性,它不适合此特定任务。 This answer 包含如何使用Javassist实现这一点的示例。

    推荐文章