节:类的加载过程之二:Linking
Posted 李阿昀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了节:类的加载过程之二:Linking相关的知识,希望对你有一定的参考价值。
经历过类的加载过程的第一个阶段(即加载阶段)以后,接下来,我们就要来看一下类的加载过程的第二个阶段了,即Linking阶段,翻译过来便是链接阶段。
链接阶段
一说到这个Linking阶段,我希望大家能立马知道的是它又被分成了如下三个具体的子阶段。
- 验证(Verify)。
- 准备(Prepare)。
- 解析(Resolve)。
自然而然,接下来我就要来分别给大家详细介绍以上三个具体的子阶段了。这里,我们就不妨先来看一下验证这一阶段。
验证(Verify)
经历过Loading阶段以后,我想大家已经知道了一个事实,即在内存中生成了一个代表被加载类的java.lang.Class
对象,并且它还被作为了方法区这个类的各种数据的访问入口。明确了这个事实之后,接下来我们就要来看一下验证这一阶段它到底都做了些什么事情了。
首先,大家要知道的一点是验证阶段它的目的是在于确保Class文件的字节流中包含的信息符合当前虚拟机要求,并还要保证被加载类的正确性,以及不会危害虚拟机自身安全。
然后,大家还要知道的一点就是验证这一阶段主要包括四种验证,它们分别是:
- 文件格式验证。
- 元数据验证。
- 字节码验证。
- 符号引用验证。
至于每种格式验证的具体细节,这里我就不展开给大家细说了,因为这并不是我们要学习的重点。
还记得我之前在概述类加载器子系统的作用时说过的类加载器子系统加载的Class文件要在文件开头含有特定的文件标识吗?接下来,我们就来举个例子,看看到底是不是有这回事。
以上是关于节:类的加载过程之二:Linking的主要内容,如果未能解决你的问题,请参考以下文章
我要写整个中文互联网界最牛逼的JVM系列教程 | 番外篇:教你如何在自己的电脑上去安装一些专门解读字节码文件的工具