Java 使用Unsafe.defineClass定义类而不解析依赖项
由于程序的需要,我需要在运行时使用null类装入器(引导类装入器)定义多个类 这通常是非常容易使用的东西,如Java 使用Unsafe.defineClass定义类而不解析依赖项,java,jvm,java-native-interface,Java,Jvm,Java Native Interface,由于程序的需要,我需要在运行时使用null类装入器(引导类装入器)定义多个类 这通常是非常容易使用的东西,如 unsafe.defineClass(name, bytes, 0, bytes.length, null, null); 但是,如果我需要定义5个不同的类,每个类都相互引用,那么这就不起作用了。JVM试图在定义这些类之前解析它们,从而导致NoClassDefFoundError 当我使用unsafe.defineClass定义JVM解析类时,是否有办法防止它们? 如果没有,是否有可能
unsafe.defineClass(name, bytes, 0, bytes.length, null, null);
但是,如果我需要定义5个不同的类,每个类都相互引用,那么这就不起作用了。JVM试图在定义这些类之前解析它们,从而导致NoClassDefFoundError
当我使用unsafe.defineClass定义JVM解析类时,是否有办法防止它们?
如果没有,是否有可能使用JNI实现这一点
此问题类似于,但提供的答案不适用,因为它包括在非空类加载器下定义类。
不安全。defineClass
不解析类,如中所述。常量池中的大多数符号引用仍未解析
在类定义时需要满足的唯一依赖项是
- 对于正在定义的任何类或接口
,所有接口C
实现之前都已定义,并且C
的超类之前也已定义C
但在定义所有引用的类之前,请确保不要初始化类或以其他方式导致类解析。您可以将它们放入jar文件并调用