JVM将运行时实现的abstract 类的信息存放在哪里?
Where does JVM store information of abstract classes implemented at runtime?
我在 Java 中使用 ASM 库从已编译的 .class 文件中提取 class 的信息。现在我无法获得在运行时实现的抽象 classes 的信息。
JVM把运行时实例化的abstract classes的信息存放在哪里?就像下面的例子。
public MockAbstractClass testForAbstract(){
return new MockAbstractClass() {
@Override
void abstractMethod() {
mockMethod();
}
}; }
static abstract class MockAbstractClass{
abstract void abstractMethod(); }
这里MockAbstractClass的对象是在运行时在testForAbstract()方法中创建的,同样class是在运行时实现的
Lambda 是在运行时生成 classes 的示例。
访问动态生成的 class 的唯一方法是通过 Instrumentation 存储它们。对于以任何方式定义的每个 class,都会调用一个组件。然后,您需要存储对那些 classes 的字节码的引用。您可以优化它以不存储 classes 可以从 classloader 检索字节码。
注意:对于 lambda,您无法获取 class 名称或 class 加载程序,但您可以阅读字节码以获取 class 名称。
我在 Java 中使用 ASM 库从已编译的 .class 文件中提取 class 的信息。现在我无法获得在运行时实现的抽象 classes 的信息。
JVM把运行时实例化的abstract classes的信息存放在哪里?就像下面的例子。
public MockAbstractClass testForAbstract(){
return new MockAbstractClass() {
@Override
void abstractMethod() {
mockMethod();
}
}; }
static abstract class MockAbstractClass{
abstract void abstractMethod(); }
这里MockAbstractClass的对象是在运行时在testForAbstract()方法中创建的,同样class是在运行时实现的
Lambda 是在运行时生成 classes 的示例。
访问动态生成的 class 的唯一方法是通过 Instrumentation 存储它们。对于以任何方式定义的每个 class,都会调用一个组件。然后,您需要存储对那些 classes 的字节码的引用。您可以优化它以不存储 classes 可以从 classloader 检索字节码。
注意:对于 lambda,您无法获取 class 名称或 class 加载程序,但您可以阅读字节码以获取 class 名称。