这里只讲 java 文件被加载到内存之后,经历的第一个环节——linking(链接)部分。
如果你想轻松形象,比较有意思地记住这个 linking(链接)环节的具体做的事情,那么本文对你有益。它是一篇记忆技巧篇————只要记住 vpn 这个单词,就能差不多掌握 linking 这个环节的内容。
首先我们知道的是,一个 .class 文件经过类加载器“门卫”的放行后,就进入了内存的空城里。接下去要面对的审核环节,就是所谓的 Linking :
这里面包含了三个过程,下面通过和 “VPN” 这个单词挂钩,达到成一个联想记忆:
V:verify,验证。它要先接受格式的检查,验一下符不符合class文件的标准先。不能说你连格式都不满足就放你过吧。这里的验证,verify,就是 vpn 里的 V。
P:prepare,准备。让我们恭喜你通过了第一道检查,格式上合格了。这时候便开始帮你打理着装,进城之前得先要有个士兵的样子。这时候开始给你准备一些类变量的默认值。比如说,如果你有声明类变量的话,这时候给你赋予默认值(徽章图)
ps:这里如果你是 static int i =8
的话可不会马上给你值R!这里只会给你默认值,要实际赋值找后面,会有人帮你换。
这里的"默认值准备",prepare,就是 vpn 里的 P。
N:neì存替换。这里做的就是将你里面的常量池引用替换成对应的内存地址,你从而拥有了直接访问到原变量的权力。
经过安检,着装整理,终于,拿到了一点正式兵的权利(骄傲脸)
这里的 nei,内存地址,就是vpn 里的 N。
所以,这几个过程就是 Linking(链接)的全部内容了。
v(verify)检查一下你这个格式合不合法。
p(prepare)合格之后开始给你准备身上的类变量的默认值,人模人样地让你进去。
n(neì 存地址)顾名思义,将常量池里的引用,帮你替换成内存地址。算是给你的第一个权限。本来这个环节叫 replace 更形象的,为了整个过程能用一个词联想得起来,便取了"内存地址"里的“内”字的中文拼音。
类加载到内存后的“链接”环节,我是记住了,你记住了吗?
参考资料: