jvm的类加载
欢迎大家来到我的博客!这是我写的第一个博客,主要分享日常所学和遇到的问题。如果有什么问题欢迎大家指出!
类的加载主要有7个过程,如下图:

1.加载
根据类的权限命名获取储存该类class文件
何时加载:
JVM采用懒加载,在根加载器去加载的时候才会被加载
2.验证
验证文件格式、符号、元信息、版本号、字节码
3.准备
给基本数据类型和引用数据类型预赋值
如果是用final修饰的属性直接完成赋值
4.解析
将间接引用转为直接引用
间接引用:类、方法在运行时指向在常量池的引用
直接引用:类、方法运行完成之后有了内存地址,不指向常量池了
5.初始化
执行静态代码块
6.使用
7.卸载
jvm的类加载器分为三种:
启动类加载器(BootStrapClassLoader)、扩展类加载器(ExtensionClassLoader)、应用类加载器(ApplicationClassLoder)
启动类加载器由C++实现;
扩展类加载器由启动类加载器加载,parent为null
应用类加载器由启动类加载器加载,parent为扩展类加载器

什么是启动类加载器?
启动类加载器没有实体,只是将那一段逻辑定义为启动类加载器
不同的类加载器加载同一个类,相等吗?为什么
不相等。因为每一个类加载器在方法区都有自己独有的存储空间
什么是双亲委派?
自定义加载器接受到类加载的请求,就去查找自己是否加载过这个类,加载过就返回;没有加载过就委托给应用类加载器;以此类推一直向上查找,双亲委派最后都没有找到就在自己类加载器中再查找一次,在没有找到就会报错
双亲委派的局限性:
不能向下委托或者不委托
什么是打破双亲委派?
类加载器向下委托或者不委托
打破双亲委托的两种方式:(有待完善)
1.自定义加载器
2.SPI机制(如driver)

浙公网安备 33010602011771号