七、JVM类加载机制
根据《深入理解java虚拟机》这本书总结
当我们写完代码,编辑成class文件,然后启动运行的时候,虚拟机会将class文件加载到内存(并不一定是本地的class文件,也可以从网络获取或者通过别的方式),并且经过对class文件中的数据进行校验、解析、初始化等过程,将class文件转化为虚拟机可以直接使用的java类型,整个这个过程可以叫做-类加载机制。
类加载的整个过程分为以下几部分:
1加载-2校验-3准备-4解析-5初始化-6使用-7卸载
个人觉得12345,五个部分就够了,其中234也可以称为连接部分。
一、加载:
所谓的加载就是加载class文件,分三个步骤
1、根据类的全限定名获取此class文件的二进制字节流
2、将class的二进制字节流转为jvm方法区中的数据结构
3、在内存中创建该类的class对象
二、校验:
校验class文件的格式、元数据等等,防止非法侵入或者非法语句
三、准备:
1、将类文件中的静态变量分配内存,存储到方法区中
2、给变量赋予初值(不是代码中设定的值,而是类型的初始值)
四、解析:
将类常量池中的符号引用专为直接引用(主要对字段、方法、调用限定等7种)
五、初始化:
执行类中定义的java代码
上面就是比较重要的5部分操作,概括了一下,还不是很深入。
关于双亲委派模式:
说到双亲委派模式,就要说到java的类加载器,一般分为三种:
1、启动类加载器
2、扩展类加载器
3、应用程序类加载器
双亲委派模式,简单的理解就是,当需要加载一个类的时候,比如3加载器需要加载一个类,3不会自己直接加载,而是先委派自己的上层2加载器去加载,2加载器也不会自己直接加载,会委派1加载器去加载,1加载器加载后,如果没有找到类,则会告诉2,2才会进行加载,如果2找到了,则加载成功,如果2没找到,则告诉1自己也没找到,最后1才会自己去加载。
总的就是,让自己的上层先加载,上层返回没有加载到的情况才会自己进行加载。