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中类型的加载器。

这里写图片描述

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类加载的主要步骤

这里写图片描述

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值