谈谈我对类加载器的理解

谈谈我对类加载器的理解

最近在看java虚拟机和tomcat源码,看到了类加载器这块儿,有点感触,随便写写。

在说类加载器之前,我们先聊聊虚拟机的加载机制:


1、一个类的生命周期:加载、链接、初始化、使用、卸载。链接又可以分为验证、准备、解析三个过程。
其中加载、验证、准备、初始化、使用、卸载是按顺序执行的,注意没有解析这一步。在加载阶段,虚拟机完成三件事:
1)通过一个类的全限定名类获取定义此类的二进制字节流。2)将字节流的所代表的静态存储结构转化成方法区运行时的数据结构。3)在内存中生成一个代表这个类的java.lang.Class的对象,做作为方法区的这个类各种数据访问的入口。
验证就是为了确保Class文件字节流中包含的信息符合当前虚拟机的要求,并且不会危害到虚拟机本身。
准备阶段是给类变量赋予初始值的阶段。这里的初始值是指变量默认的指,并不是用户赋予的初始值。
初始化阶段是类加载的最后一步。是给类变量赋予初始值。
接下来我们就聊聊类加载器,类加载器就是把类加载阶段中的”通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到java虚拟机外部来实现的代码模块。

类加载器的分类:


启动类加载器、扩展类加载器、应用类加载器(系统类加载器)、用户自定义类加载器。
启动类加载器:这个类负责将存放在JAVA_HOME/lib目录或者被-Xbootclasspath参数所指定的路径中的并且是虚拟机内存中。
扩展类加载器:负责加载JAVA_HOME/lib/ext目录中或者被java.ext.dirs系统变量指定路径中的所有类库,开发者可以直接使用扩展类加载器。
应用程序类加载器:负责加载用户类路径上指定的类加载器,一般情况下就是程序中默认的类加载器。
各个类加载器之间的关系:
这里写图片描述

类加载器的双亲委派原理:


就是加载器在加载类时,先检查当前类有没有被加载,如果没有被加载,
则首先调用父类加载器加载,如果父类加载器加载失败,才交给当前的类
加载器加载。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值