目前,我正在使用ASM library实施自定义软件指标工具。通过这个库计算方法大小的唯一方法是在每次指令访问时manually increment一些大小变量,这对我来说有点不对。还有另一种计算方法字节码大小的常用方法吗?或者每指令大小计算是否足够合理?
答案 0 :(得分:1)
手动添加指令大小不适用于ASM,因为ASM专注于处理指令并方便地隐藏不同形式的语义相同指令。
例如,ALOAD_0
(一个字节),ALOAD 0
(两个字节)和WIDE ALOAD 0
(四个字节)具有相同的含义并报告给{{1}通过visitVarInsn(Opcodes.ALOAD, 0)
电话。然后,您在处理此指令时不必关心不同的表单,但您不知道原始类文件中存在哪个表单。
由于ASM不提供直接处理MethodVisitor
属性的API,因此它不适合此特定任务。 This answer包含了如何使用Javassist实现此目的的示例。