类加载器相关知识整理
类的生命周期
一个类的生命周期可以细分以下七步:
加载->验证->分配内存->解析->初始化->使用->卸载
1.加载-读取二进制内容
2.验证-验证class文件格式规范等
3.分配内存-设置类static修饰的变量初始值
4.解析-解析类,接口,字段,类方法的解析等
5.初始化-为静态变量赋值,执行静态代码块
6.使用-创建实例对象
7.卸载-从jvm方法区中卸载
类加载器
类加载器主要分为4种:
1.顶级类加载器:Bootstarp loader 核心类库加载器
加载JRE_HOME/jre/lib目录,如String,Integer等
2.Extension class loader 扩展类库加载器
加载JRE_HOME/jre/lib/ext目录
3.Application class loader 应用程序类库加载器
加载java.class.path指定的目录,应用程序classpath
4.自定义类加载器,可以加载指定位置的文件
类什么时候被卸载?
1.该class所有实例都已经被GC
2.加载该类的classLoader已经被GC了
类的静态方法,静态变量什么时候被执行?
在创建类的实例的时候会执行,并且不会对类进行重复进行加载
双亲委派模型
当类被加载的时候,当前类加载器不会先加载,而是委托它上一级别的类加载器去加载,一直找到可以加载的类加载器,否则向下查找,一直找到可以加载该类的类加载器
三大类加载器加载顺序 Bootstarp classloader->Extension classloader->Application classloader->自定义类加载器