目前我正在使用ASM library实现自定义软件度量工具。通过这个库计算方法大小的唯一方法是在每次指令访问时手动增加一些大小变量,这在我看来有点不对劲。还有另一种计算方法字节码大小的常用方法吗?还是按指令大小计算是否足够合理?
问问题
658 次
1 回答
1
手动添加指令大小不适用于 ASM,因为 ASM 专注于处理指令并方便地隐藏语义相同指令的不同形式。
例如,ALOAD_0
(一个字节)、ALOAD 0
(两个字节)和WIDE ALOAD 0
(四个字节)具有相同的含义,并MethodVisitor
通过visitVarInsn(Opcodes.ALOAD, 0)
调用报告给a。那么你在处理这条指令时就不必关心不同的形式,但是你不知道原始类文件中存在哪一种。
由于 ASM 没有提供直接处理Code
属性的 API,因此不适合这种特定任务。此答案包含一个如何使用 Javassist 实现此目的的示例。
于 2018-03-12T18:01:47.907 回答