有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java ASM跳过某些方法的代码

有没有办法告诉ASM我不想对某个特定的方法使用SKIP_CODE选项?例如,如果我有这样一个非常大的班级:

public class Large
{
    public void doManyThings() { /* ... */ }

    public void methodWithLongBytecode() { /* ... */ }

    public @inline void inlinableMethod() { /* ... */ }
}

我的编译器花了很多时间在它不需要代码的方法上,因为它们无论如何都不能内联。然而,我仍然希望能够读取inlineableMethod,这样编译器就可以将它的字节码内联到调用程序中。有没有办法在课堂阅读期间使用ASM 5.0.3暂时“禁用”SKIP_CODE标志


共 (1) 个答案

  1. # 1 楼答案

    不幸的是,没有。如果查看source code of a ASM ^{},可以看到SKIP_CODE属性被解释一次,然后存储在局部变量中。因此,即使反射地更改标志,也可以跳过所有方法或不跳过任何方法。但是,通过从visitMethod返回null,可以指示不要完全解释方法