类加载的大概流程和特点

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/One_Month/article/details/82491752

1.类加载的大概过程

如果类未被加载到内存,会经过加载,连接,初始化过程。提供java.lang.Class对象

2.类的连接

(1) 验证: 验证类是否有正确的内部结构,防止有人估计加入错误信息
(2) 准备: 为类变量分配内存,并设置默认值
(3) 解析: 将符号引用转化为直接引用(final变量直接当作宏变量)

3.类初始化的时机

1.创建类的实例,用new 或 反射 或 反序列化
2.调用类的类方法
3.访问类的类变量或为类变量赋值
4.反射创建对应java.lang.Class对象
note:访问final修饰的变量,由于该值在编译器确定,不会导致初始化

4.JVM的类加载特点

(1)全盘负责:一个类加载器负责加载某个类,该类所依赖和引用的其他class也将由该类加载器载入,除非显式的使用另一个类加载器。
(2)父类委托:先让父类加载器尝试加载该类,当父类无法加载时才从自己的类路径加载该类
(3)缓存机制:已加载的Class都会被缓存,当程序需要使用时会先从缓存中搜寻该Class,缓存不存在时才会读取对应二进制数据,并将其转换成Class对象,存入缓存(这也是修改了一个类,必须重启JVM,修改才生效的原因)

猜你喜欢

转载自blog.csdn.net/One_Month/article/details/82491752