喵星之旅-沉睡的猫咪-类加载机制
从源码到类文件
java文件—词法分析—tokens流--语法分析--语法树--语义分析--注解抽象语法树--字节码生成器--class文件
简单来说就是编译过程。
从类文件到虚拟机
装载:查找导入class文件
验证:文件格式、字节码验证、符号引用验证等
准备:为静态量分配内存,初始化为“默认值”
解析:符号引用转换为直接引用(获取内存地址)
初始化:静态量真正赋值
类加载器
装载是通过类加载器实现的,java中有4个加载器:
最高级的顾问(外援):外部资源
高级长官(老大,一般人见不到):内部平台资源
可商讨的领导(可以找到的领导):classpath的引用
自己的掌控:自己写的class
类加载的特点
责任感:就是当一个类加载器负责加载某个Class时,该Class所依赖和引用其他Class也将由该类加载器负责,除非明确指定让别人负责。
等级森严:先让顶级加载器试图加载该Class,只有在顶级加载器无法加载该类时才尝试从低一级的加载器负责。通俗的讲,就是双亲委派。
记忆力超强:也叫缓存机制。保证所有加载过的Class都会被缓存,当程序中需要使用某个Class,类加载器先从缓存区中搜寻Class,只有当缓存区中不存在该Class时,才会读取该类对应的二进制数据,并将其转换成Class对象,存入缓冲区中。所以修改了Class后,必须重新启动JVM,程序所做的修改才会生效。
作者:喵星兔
出处:https://www.cnblogs.com/kittybunny/
喵星之旅:https://www.cnblogs.com/kittybunny/p/12148641.html
我的视频:https://space.bilibili.com/518581788
更多内容:不咬人的小兔子
本博客所有文章仅用于学习、研究和交流目的,欢迎非商业性质转载。
我是兔子,我会喵,我叫喵星兔~~