计算方法的字节码大小
Calculate Bytecode Size of a Method
目前我正在实现自定义软件度量工具,在每次指令访问时使用 ASM library. The only way to calculate size of a method via this library is to manually increment 一些大小变量,这对我来说有点不对劲。还有另一种计算方法字节码大小的常用方法吗?或者每条指令的大小计算是否足够合理?
手动添加指令大小不适用于 ASM,因为 ASM 专注于处理指令并方便地隐藏语义相同指令的不同形式。
例如,ALOAD_0
(一个字节)、ALOAD 0
(两个字节)和WIDE ALOAD 0
(四个字节)都具有相同的含义,并报告给一个MethodVisitor
通过 visitVarInsn(Opcodes.ALOAD, 0)
调用。那么你在处理这条指令时就不必关心不同的形式,但是你不知道原始class文件中存在的是哪一个。
由于 ASM 没有提供 API 来直接处理 Code
属性,因此它不适合这个特定的任务。 包含如何使用 Javassist 实现此目的的示例。
目前我正在实现自定义软件度量工具,在每次指令访问时使用 ASM library. The only way to calculate size of a method via this library is to manually increment 一些大小变量,这对我来说有点不对劲。还有另一种计算方法字节码大小的常用方法吗?或者每条指令的大小计算是否足够合理?
手动添加指令大小不适用于 ASM,因为 ASM 专注于处理指令并方便地隐藏语义相同指令的不同形式。
例如,ALOAD_0
(一个字节)、ALOAD 0
(两个字节)和WIDE ALOAD 0
(四个字节)都具有相同的含义,并报告给一个MethodVisitor
通过 visitVarInsn(Opcodes.ALOAD, 0)
调用。那么你在处理这条指令时就不必关心不同的形式,但是你不知道原始class文件中存在的是哪一个。
由于 ASM 没有提供 API 来直接处理 Code
属性,因此它不适合这个特定的任务。