您的位置:首页 > 编程语言 > Java开发

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

2012-03-15 15:16 246 查看
1.2 类加载机制

类加载机制分为几步

1 装载

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

2 链接

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

3初始化

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

1 调用了该类的new

2 反射调用了类中的方法

3 子类调用了初始化

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

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



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实例。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: