gpt4 book ai didi

java - 字节码如何在 JVM 中得到验证?

转载 作者:太空狗 更新时间:2023-10-29 23:03:05 25 4
gpt4 key购买 nike

字节码如何在 JVM 中得到验证?

最佳答案

Oracle 自己有一个关于它如何工作的小片段页面 here .

基本上,JRE 不信任 JDK。那是因为它不知道哪个 JDK 编译器创建了类文件。在经过验证之前,它会将类文件视为恶意文件。

在此基础上进一步扩展,字节码验证是防止 Sun 称为“恶意编译器”的必要步骤。 Sun 自己的 Java 编译器确保 Java 源代码不违反安全规则,但是当应用程序导入代码片段时,它实际上不知道代码片段是否遵循 Java 语言安全规则。换句话说,代码可能不是由值得信赖的 Java 编译器生成的。

在这种情况下,您机器上的 Java 运行时系统必须假定该片段是错误的并对其进行字节码验证。

在通过此验证过程之前,Java 虚拟机甚至看不到字节码。在加载字节码时这样做还有一个好处,即每次执行代码时都不需要执行大量运行时检查。因为它已被验证为正确的,所以一旦开始运行,它就可以比其他方式运行得更快。

链接图的再现如下:

                    <<<=== Unsafe / Safe ===>>>
\
+---------------+ +-------------------+
| Java source | +--> | Class loader | --+
+---------------+ | | Bytecode verifier | |
| | +-------------------+ |
V | / |
+---------------+ | \ V
| Java compiler | Network / +-------------------+
+---------------+ | \ | JVM/JIT |
| | / +-------------------+
V | \ |
+---------------+ | / V
| Java bytecode | --+ \ +-------------------+
+---------------+ / | Operating system |
\ +-------------------+
/ |
\ V
/ +-------------------+
\ | Hardware |
/ +-------------------+
\
<<<=== Unsafe / Safe ===>>>

关于java - 字节码如何在 JVM 中得到验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/755005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com