字节码如何在JVM中得到验证?
问题内容:
字节码如何在JVM中得到验证?
问题答案:
甲骨文本身有它如何工作的一个小片段页面在这里。
基本上,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 ===>>>