JVM在哪里存储在运行时实现的抽象类的信息?

时间:2018-06-19 16:19:37

标签: java jvm abstract-class java-bytecode-asm

我正在使用Java中的ASM库从已编译的.class文件中提取类的信息。现在,我无法获取在运行时实现的抽象类的信息。

JVM在哪里存储在运行时实例化的抽象类的信息?像下面的示例。

public MockAbstractClass testForAbstract(){
    return new MockAbstractClass() {
        @Override
        void abstractMethod() {
            mockMethod();
        }
    }; }

static abstract class MockAbstractClass{
    abstract void abstractMethod();   }

此处的MockAbstractClass对象是在运行时通过testForAbstract()方法创建的,该类也是在运行时实现的。

1 个答案:

答案 0 :(得分:1)

Lambda是一个在运行时生成类的示例。

访问动态生成的类的唯一方法是通过Instrumentation存储它们。对于以任何方式定义的每个类都有一个组件被调用。然后,您需要存储对这些类的字节码的引用。您可以对此进行优化,以不将类存储在可以从类加载器中检索字节代码的位置。

注意:对于lambda,您不会获得类名或类加载器,但可以读取字节码来获取类名。