java 字节码校验_如何在JVM中验证字节码?

甲骨文自己有一个关于它如何工作的小片段页面

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 ===>>>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值