java类加载过程

java的类加载器是一个运行时的核心基础设施代码块

主要分为Load,Link,Init

第一步,Load阶段读取类文件产生二进制流,并转化为特定的数据结构,初步的校验cafe babe魔法数、常量池、文件长度、

是否有父类等,然后创建对应的类的java.lang.Class实例

第二步,Link阶段包括验证、准备、解析三个步骤。验证是更详细的校验,比如final是否合规、类型是否正确等;准备阶段是为静态变量分配内存,并设置默认值,解析类和方法确保类与类之间的相互引用的正确性完成内存结构布局

第三步 Init阶段执行类构造器<clinit>方法,如果赋值运算时通过其他类静态方法来完成的,那么会马上解析另外一个类,

Bootstrap ClassLoader --------> jre/lib/rt.jar

Platform ClassLoader -------> jre/lib/ext/*.jar

Application ClassLoader ------> CLASSPATH

当加载一个类时首先询问CLASSPATH 是否已经加载了 否 在询问Platform是否加载 否 再询问时候加载BootStrap 

然后向下尝试加载,都加载不了通知当前类加载器准予加载

通过代码查看BootStrap已加载的类库

自定义类加载器

(1)隔离加载类

在某些框架内进行某些中间件与应用的模块隔离,把类加载到不同的环境。

(2)修改类的加载方式 类的加载模型并非强制的,除了BootStrap外其他加载并非一定得引入,可以根据按照需要进行动态引入

(3)扩展加载源 比如数据库、网络、甚至是电视机顶盒进行加载

  (4)防止源码泄露。java代码容易被编译和篡改,进行代码的编译加密。那么类加载器也需要自定义,还原加密字节码

实现自定义类加载器的步骤:继承ClassLoader,重写findClass()方法,调用defineClass()方法。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值