Java的类加载机制

2019-02-28  本文已影响0人  zhouwaiqiang
  1. 总共七个过程:加载——验证——准备——解析——初始化——使用——销毁
  2. 加载:通过一个类的全限定名获取此类的二进制字节流。将这个字节流代表的静态存储结构转化为方法区的运行时数据结构。在内存中生成一个Java.lang.Class对象,作为方法区这个类的各种数据的访问入口
  3. 验证:用于验证此类文件的字节流包含的信息是否符合Java虚拟机规范,不会危害虚拟机自身安全。验证包括文件格式验证、元数据验证、字节码验证、符号引用验证。
  4. 准备:正式为类变量分配内存并设置类变量初始化的阶段。这个阶段进行内存分配的仅包括类变量(static修饰的变量),不包括实例变量,实例变量会在对象实例化时跟着对象一起分配在Java堆中。在这里说的类变量初始化也只是指将这个变量的数据类型的零值。
  5. 解析:虚拟机将常量池内的符号引用替换为直接引用的过程。直接引用指的是直接指向目标的指针、相对偏移量或者是一个能间接定位到目标的句柄。
  6. 初始化:执行构造器<clinit>()方法的过程。首先clinit方法是编译器自动收集类中的所有类变量的赋值动作和静态语句块中的语句合并产生的。静态语句块只能访问到定义在静态语句块之前的变量定义之后的变量,在前面的静态语句块中可以赋值,但是不能访问。父类的clinit方法执行之后才能执行子类的方法。

类加载器

上一篇下一篇

猜你喜欢

热点阅读