【问题标题】:Calculate Bytecode Size of a Method计算方法的字节码大小
【发布时间】:2018-03-12 14:26:36
【问题描述】:

目前我正在使用ASM library 实施自定义软件度量工具。通过这个库计算方法大小的唯一方法是在每次指令访问时 manually increment 一些大小变量,这对我来说看起来有点不对劲。还有另一种计算方法字节码大小的常用方法吗?还是按指令大小计算是否足够合理?

【问题讨论】:

    标签: java metrics java-bytecode-asm jvm-bytecode


    【解决方案1】:

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

    例如,ALOAD_0(一个字节)、ALOAD  0(两个字节)和WIDE ALOAD  0(四个字节)具有相同的含义,并通过visitVarInsn(Opcodes.ALOAD, 0) 调用报告给MethodVisitor。那么你在处理这条指令的时候就不必关心不同的形式,但是你不知道原始类文件中存在哪一种。

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

    【讨论】:

      猜你喜欢
      • 2014-02-16
      • 1970-01-01
      • 2013-10-21
      • 1970-01-01
      • 2011-04-28
      • 2021-05-20
      • 1970-01-01
      • 2014-09-26
      • 1970-01-01
      相关资源
      最近更新 更多