java类加载时机与过程
开篇 最近刚刚看了Uber开源的JVM Profiler的源码,对里面的修改字节码的流程有了一定的认识,刚好之前看到网上有人写了一篇关于java类加载时机与过程的文章,想了想决定把两者合并起来写一下。概念比较基础,有兴趣的可以看看。 类加载过程 加载 加载(Loading)阶段是“类加载”(Class Loading)过程的第一个阶段,在此阶段,虚拟机需要完成以下三件事情: 1、 通过一个类的全限定名来获取定义此类的二进制字节流。 2、 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。 3、 在Java堆中生成一个代表这个类的java.lang.Class对象,作为方法区这些数据的访问入口。 加载阶段即可以使用系统提供的类加载器在完成,也可以由用户自定义的类加载器来完成。 加载阶段与连接阶段的部分内容(如一部分字节码文件格式验证动作)是交叉进行的,加载阶段尚未完成,连接阶段可能已经开始。 验证 验证是连接阶段的第一步,这一阶段的目的是为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。 准备 准备阶段是为类的静态变量分配内存并将其...