喵星之旅-沉睡的猫咪-类加载机制

从源码到类文件

java文件—词法分析—tokens--语法分析--语法树--语义分析--注解抽象语法树--字节码生成器--class文件

简单来说就是编译过程。

 

从类文件到虚拟机

装载:查找导入class文件

验证:文件格式、字节码验证、符号引用验证等

准备:为静态量分配内存,初始化为“默认值”

解析:符号引用转换为直接引用(获取内存地址)

初始化:静态量真正赋值

 

类加载器

装载是通过类加载器实现的,java中有4个加载器:

最高级的顾问(外援):外部资源

高级长官(老大,一般人见不到):内部平台资源

可商讨的领导(可以找到的领导):classpath的引用

自己的掌控:自己写的class



类加载的特点

责任感就是当一个类加载器负责加载某个Class时,该Class所依赖和引用其他Class也将由该类加载器负责,除非明确指定让别人负责。

等级森严先让顶级加载器试图加载该Class,只有在顶级加载器无法加载该类时才尝试从低一级的加载器负责。通俗的讲,就是双亲委派。

记忆力超强也叫缓存机制。保证所有加载过的Class都会被缓存,当程序中需要使用某个Class,类加载器先从缓存区中搜寻Class,只有当缓存区中不存在该Class时,才会读取该类对应的二进制数据,并将其转换成Class对象,存入缓冲区中。所以修改了Class后,必须重新启动JVM,程序所做的修改才会生效。



posted @ 2020-04-05 19:40  喵星兔  阅读(214)  评论(0编辑  收藏  举报