java - 为什么Java要进行字节码校验?

标签 java compilation byte bytecode verification

据我目前的理解this article作者写的主要目的是检查是否有人更改了字节码。因为“由编译器为 Java 编程语言生成的类文件总是通过验证”。这是我们拥有字节码 validator 以防止其他人恶意更改我们的字节码的唯一原因吗?

最佳答案

另一个原因是检查字节码确保这是 jvm 可以运行的实际有效字节码,它可以防止 jvm 运行无效代码,这可能会导致一些不可预测的结果。通过禁用字节码验证,您表示您相信您加载的所有类在字节码级别没有错误。

有用 article .

当你有一个有很多依赖项的大项目时,你通常不能确定是否在这个项目或其依赖项中的某处生成了一些类,即使你确定现在这些地方,你也不能确定没有那里有 bug 。生成这些类的代码可能存在错误,您最终可能会得到无效的字节码。

即使是 javac 也可能有一些错误,因此即使它也可能产生无效的类作为输出。

关于java - 为什么Java要进行字节码校验?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50485128/

相关文章:

java - 请您解释一下结果的过程

linux - 使用 'make xconfig' 从源代码编译内核的脚本

c++ - 我们不能混合使用 g++ 和 clang++ 编译的对象(或库)吗?至少在 Mac 上?

java - 我们可以将整数存储在少于 4 个字节中吗?

java - 输出流到字节[]

java - 相当于@Primary的Spring XML

java - com.fasterxml.jackson.databind.JsonMappingException 无法构造类的实例

java - 如何将 FK 约束放在 mysql 中的两个表上,一个表是 InnoDB,另一个是 MyISAM

c - 最新版libnfc找不到读卡器

java - 为什么 Byte 不能保存在其范围内的值?