Java类加载机制
Java类加载过程主要分为三个部分:
loading → linking(verification → preparation → resolution) → initializing
Loading
主要通过ClassLoader将资源(.class文件等)载入JVM,是一个懒加载,只有在使用到的时候才进行加载
loading过程如下图所示
Android的常用ClassLoader 待补充(最好再补充一下插件化的知识)
java中的类加载器
- BootStrapClassLoader:引导类加载器
- ExtClassLoader:扩展类加载器
- AppClassLoader:应用程序类加载器
ClassLoader源码
ClassLoader加载类的代码主要是loadClass方法中实现了双亲委派机制
1 | ClassLoader.java |
双亲委派机制好处
- 安全:可以防止核心类库的api被篡改
- 防止重复加载类
自定义ClassLoader
- extend ClassLoader
- overwrite findClass() →defindClass(byte[] →Class clazz)
- 加密
什么时候需要主动使用类加载器加载一个类?
- 混合执行 编译执行 解释执行 补充三者速度?
- 如何打破双亲委派 ?重写loadClass()
Linking
Verification
校验字节码文件的正确性
Preparation
给静态变量分配内存并赋默认值
如 static int a = 0;
static User user = null;Resolution
Initializing
给Preparation中的变量赋指定值, 执行静态代码块
static int a = 666;
static User user = new User();
笔记图片来源于bilibili马士兵课程 如有侵权请联系立马删除
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 个人学习经验分享!