jvm学习篇2-java类加载机制

 

1.2 类加载机制

类加载机制分为几步

1 装载

装载过程就是将classLoader 将二进制字节码加载到jvm中,jvm通过全限定名及类加载器完成对类的加载 同样类加载器加上类全名也是在jvm的唯一标示id

2 链接

链接过程负责对二进制字节码进行格式校验 初始化装载类中的静态变量及解析类中调用接口、类。

3初始化

初始化过程既是执行类中的静态初始化代码、构造器代码、静态属性的初始化。一下四种情况会调用初始化过程

1 调用了该类的new

2 反射调用了类中的方法

3 子类调用了初始化

4 jvm启动过程中的指定的初始化类。

下面说一下jvm的类加载器吧

 

图片1类加载器

 

1 bootstrap class Loader

对于此类的编写语言有争议,有的说是c语言,有的说是c++,鄙人 百度了一下众说纷纭,反正不是用java实现的。暂且是认为它是c++实现的吧

jdk启动时会初始化此ClassLoader 并有classLoader完成javahome下的jre lib rt.jar里所有文件的加载 该jar中包含了java规范定义的所有接口和实现。

2 extension class Loader

jvm 用此类classLoader来加载扩展一些功能包 例如sun jdk中的 对应该classLoader的加载器类名为ExtClassLoader

3 System class Loader

jvm用此Class Loader 来加载启动参数中指定的Classpath中jar包和目录在jdk中对应的类名为AppClassLoader

4 user-defined class Loader

是java开发人员自定义的继承ClasLoader抽象类自行实现的ClassLoader 基于自定义的ClassLoader可用于加载非ClassPath中的jar及目录,比如可以从网络上下载的jar或二进制。

还可以进行加载之前对class做一些操作,比如解密。

 ps:

jvm的默认类加载机制是按照树形加载,加载类时会先从父加载器中查找是否已经加载,如果没有则依次递归,直至bootstarp类,jvm会保证同一个classLoader中只加载一次class实例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值