目前,我正在使用ASM库实现自定义软件度量工具。通过这个库计算方法大小的唯一方法是在每次访问指令时人工增量一些大小变量,这在我看来有点不对。还有另一种常用的方法来计算字节码大小吗?还是每次指令大小的计算都是合理的?
发布于 2018-03-12 18:01:47
手动添加指令大小并不适用于ASM,因为ASM专注于处理指令,并且方便地隐藏不同形式的语义相同的指令。
例如,ALOAD_0 (一个字节)、ALOAD 0 (两个字节)和WIDE ALOAD 0 (四个字节)具有相同的含义,并通过visitVarInsn(Opcodes.ALOAD, 0)调用向MethodVisitor报告。然后,在处理此指令时,您不必关心不同的表单,但是您不知道原始类文件中存在哪种表单。
因为ASM没有提供直接处理Code属性的API,所以它不适合这个特定的任务。这个答案包含一个示例,说明如何使用Javassist实现这一目标。
https://stackoverflow.com/questions/49237660
复制相似问题