1. 类加载机制:
类被加载到虚拟机内存包括加载、连接、初始化几个阶段,其中链接又被细化为验证、准备、解析。
这里需要注意的是,解析阶段在某些情况下可以在初始化阶段之后再开始,这是为了支持Java的运行时绑定。各个阶段的作用整理如下:
1.1 加载阶段:
加载阶段可以使用系统提供的加载器(ClassLoader),也可以用自定义加载器完成,开发人员可以通过定义类的加载器去控制字节流的获取方式。
(1)通过全类名产生对应类的二进制数据流。
(2)将二进制数据流转换为方法区的数据结构。
(3)创建类对应的java.lang.Class对象,作为方法区数据结构的访问入口。
1.2 链接阶段(实现java动态性):
(1)验证 保证class文件字节流的正确性。
(2)准备 为方法区的静态变量分配内存空间,并赋初值。
(3)解析 把符号引用解析为直接引用
符号引用是一个字符串,它唯一标识一个类、一个字段、一个方法等。
直接引用对于类变量、类方法指的是指向方法区的指针,然后对于实例方法、实例对象来说就是偏移量,比如一个实例方法,子类中方法表中的偏移量和父类是一致的,这个偏移量可以确定某个方法的位置。
1.3 初始化阶段: