JVM-类加载机制
二、类加载
(一)类加载包括 loading linking initialization 三个过程
loading 阶段获取此类的二进制转化成方法区的运行数据结构,在内存中生成一个代表类的 class 对象
linking 阶段会有三步 验证=> 准备 => 解析
2.1 验证- 需要确保class文件符合JVM规范,前缀是cafebabe结构2.2 准备- 未类变量赋默认的初始值,这里需要注意两点:
A: 被final 修饰的static不包含在里面,因为被final修饰的在编译的时候就已经分配好了; B: 实例变量也不包含在里面,因为对象还没被创建;复制代码
2.3 解析- 主要是将常量池的符号引用转换为直接引用的过程
initialization 阶段 就是执行类构造器方法的过程,clinit()方法是javac编译器自动收集到有被 static 修饰的代码块或类变量之后的构成的
(二)类加载机制-双亲委派
前面提到了类加载的过程,我们又知道Java提供了很多的常用类,比如String,那怎么能保证Java官方提供的类是安全的?这里java也提供了一套官方的保护机制-双亲委派机制; 官方的类交给自己的加载器加载,这样的话就可以防止核心API被篡改。
作者:卢卡夫斯基
链接:https://juejin.cn/post/7039168465445322789