本文主要总结一下我对Java类加载器(Class Loader)认识,如有不准确之处还望大侠不吝赐教!
关键字:Java,类加载器(Class Loader)
主要从如下几个部分进行介绍:
- 类加载的过程
- 类加载器的层级
- 类加载器的操作原则
- 为什么要个性化类加载器
- 其它相关问题
类加载的过程
类加载器的主要工作就是把类文件加载到JVM中。如下图所示,其过程分为三步:
- 加载:定位要加载的类文件,并将其字节流装载到JVM中;
- 链接:给要加载的类分配最基本的内存结构保存其信息,比如属性,方法以及引用的类。在该阶段,该类还处于不可用状态;
- 验证:对加载的字节流进行验证,比如格式上的,安全方面的;
- 内存分配:为该类准备内存空间来表示其属性,方法以及引用的类;
- 解析:加载该类所引用的其它类,比如父类,实现的接口等。
- 初始化:对类变量进行赋值。
类加载器的层级
下图虚线以上是JDK提供的几个重要的类加载器,详细说明如下:
- Bootstrap Class Loader: 当启动包含主函数的类时,加载JAVA_HOME/lib目录下或-Xbootclasspath指定目录的jar包;
- Extention Class Loader:加载JAVA_HOME/lib/ext目录下的或-Djava.ext.dirs指定目录下的jar包。
- System Class Loader:加载classpath或者-Djava.class.path指定目录下的类或jar包。
需要了解的是?