JVM类加载机制

部分内容摘抄于《深入理解Java虚拟机》第二版-第七章《虚拟机加载类的机制》

  1. 定义
    JVM将编译生成的.class文件按照需求和一定的规则加载到内存中,并组织成为一个完整的Java应用程序。这个加载的过程是由类加载器来完成的;具体来说是由ClassLoader和它的子类来是实现的。类加载器本身也是一个类,其实质是把类文件从硬件读取到文件内存中。

  1. 类的加载方式
    2.1)隐式加载:使用new创建对象;
    2.2)显示加载:调用class.forName()方法。

  1. 特点
    3.1)当程序启动时,只把基类加载到JVM中;
    3.2)每一个类、接口都对应着一个.class文件;
    3.3)类的加载时是动态的;
    3.4)当初始化一个类的时候,如果发现其父类没有进行初始化,则会先触发父类的初始化;
    3.5)当虚拟机启动时,会先初始化声明main()函数的类。

  1. 类加载机制

在Java语言中可以类分为3中:系统类,扩展类,自定义类。Java针对这3中类提供了3中类型的加载器。

JVM类加载机制_第1张图片

4.1) Bootstrap ClassLoader /启动类加载器:负责加载JAVA_HOME/lib下面的类库加载到内存中(eg:rt.jar),该类加载器是使用C++语言实现的(其他的类加载器是由JAVA实现的,独立于JVM,继承于java.lang.ClassLoader),是虚拟机自身的一部分;
4.2 )Extension ClassLoader/扩展类加载器:负责加载JAVA_HOME/lib/ext;
4.3 )Application ClassLoader/ 系统类加载器:负责加载classpath中指定的类库加载到内存中;
4.4 )Custom ClassLoader/用户自定义类加载器(java.lang.ClassLoader的子类)(Tomcat)
注意:他们之间的关系不是继承关系,是组合关系

加载顺序:自顶向下
检查顺序:自底向上


5类加载的主要步骤

JVM类加载机制_第2张图片

1)加载(装载):根据路径找到相对应的class文件,然后导入。

2)连接:连接可以分为3个小步骤

  • 验证:检查待加载的类是否正确
  • 准备:给类中静态变量分配存储空间
  • 解析:将来符号引用转换成直接引用

3)初始化:对静态变量和静态代码块进行初始化。

你可能感兴趣的:(JVM)