java 类加载器是否验证方法体?
Does java classloader validate method body?
对于 Java 编译器解析对不同文件中另一个 class 的引用需要在 class 路径上。
我知道如果在 class 路径上找不到 class 或者方法签名不匹配,则会抛出一些异常。
但是,在方法实现方面,有没有比较编译时 classpath 和运行时 classpath 的验证?
如果我提供 classpath 的方法签名与编译时的方法签名匹配,但实现不同。
不会出现验证错误或抛出任何异常吗?这看起来很没有安全感。
一般来说,不会,只要签名匹配,一些 JVM 甚至可以在运行时替换方法(模数一些额外的约束)。
当然,自定义类加载器实现可以执行扩展验证,例如检查 hashes/signatures。
JVM 的作用validate is the standards-conformance of the bytecode。 IE。字节码不能引用不存在的堆栈槽,不能进行任意跳转或类似会导致 JVM 内部非法行为的事情。
对于 Java 编译器解析对不同文件中另一个 class 的引用需要在 class 路径上。
我知道如果在 class 路径上找不到 class 或者方法签名不匹配,则会抛出一些异常。
但是,在方法实现方面,有没有比较编译时 classpath 和运行时 classpath 的验证?
如果我提供 classpath 的方法签名与编译时的方法签名匹配,但实现不同。
不会出现验证错误或抛出任何异常吗?这看起来很没有安全感。
一般来说,不会,只要签名匹配,一些 JVM 甚至可以在运行时替换方法(模数一些额外的约束)。
当然,自定义类加载器实现可以执行扩展验证,例如检查 hashes/signatures。
JVM 的作用validate is the standards-conformance of the bytecode。 IE。字节码不能引用不存在的堆栈槽,不能进行任意跳转或类似会导致 JVM 内部非法行为的事情。