计算方法的字节码大小

时间:2018-03-12 14:26:37

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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