2、JVM的类加载机制

类加载步骤:

类加载过程分为这几个步骤:加载 --> 验证 --> 准备 --> 解析 --> 初始化

加载:将类的.class文件从硬盘载入到JVM运行时数据区的方法区中,或是叫元数据区中;

验证:校验.class文件的完整性与正确性;

准备:给类分配一定的内存空间,然后给它的静态变量分配一定的内存空间,再来一个默认的初始值;

解析:将符号引用替换为直接引用,也就说说将.class中的静态变量赋值为上面新分配的那个静态变量的内存空间地址;

初始化:执行具体代码中的静态变量赋值,执行静态代码块中的逻辑等等。

其中验证、准备、解析统称为链接阶段。

什么时候会初始化一个类?

1、一个类的实例被创建(new操作、反射、cloning,反序列化)

2、调用类的static方法

3、使用或对类/接口的static属性进行赋值时(这不包括final的与在编译期确定的常量表达式)

4、当调用 API 中的某些反射方法时

5、子类被初始化

6、被设定为 JVM 启动时的启动类(具有main方法的类)

双亲委派机制:

1、启动类加载器:

BootStrap ClassLoader, 负责加载Java安装目录下的/lib下的核心类库。

2、扩展类加载器:

Extension ClassLoader, 负责加载Java安装目录下的/lib/ext下的扩展类库。

3、应用程序类加载器:

Application ClassLoader, 负责加载 ClassPath 路径下的类,可以理解为加载应用所写的Java类。

4、自定义类加载器:

可以在程序中自定义类加载器,然后去加载指定的类。

工作流程:加载一个类是,先让父加载器去加载,不行的话自己在来加载。层层往上去询问,如果父类加载不了,自己再加载,如果自己也加载不了,再往下递推。

那为什么要有双亲委派机制呢?双亲委派机制的作用是什么?

一个JVM中要保证com.cn.A.class对象只能有一个,但类加载器却有多个,如果多个类加载之间不进行互通有无,那么就无法保证class对象的唯一性。

1、JVM是如何工作的?_jerry_dyy的博客-CSDN博客_jvm是如何运行的

2、JVM的类加载机制_jerry_dyy的博客-CSDN博客

3、JVM内存区域划分_jerry_dyy的博客-CSDN博客_jvm的内存区域划分

4、JVM垃圾回收机制_jerry_dyy的博客-CSDN博客

5、JVM分代模型--新生代 的垃圾回收_jerry_dyy的博客-CSDN博客_jvm新生代划分

6、JVM分代模型--老年代 的垃圾回收_jerry_dyy的博客-CSDN博客

7、常见的垃圾回收器_jerry_dyy的博客-CSDN博客

8、JVM优化简介_jerry_dyy的博客-CSDN博客

9、学会查看GC日志_jerry_dyy的博客-CSDN博客

10、摸清JVM运行状况_jerry_dyy的博客-CSDN博客

11、摸清JVM对象分布_jerry_dyy的博客-CSDN博客

12、OOM简介_jerry_dyy的博客-CSDN博客

13、OOM模拟_jerry_dyy的博客-CSDN博客

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值