JVM学习笔记---------类加载机制

说类加载器之前先说说类加载机制.

类加载机制:

1. 概念:

虚拟机把class文件加载到内存,并对数据进行检验,转换分析和初始化,形成虚拟机能够使用的java文件.

2.加载步骤:

1) 装载:
a. 查找和导入class文件
b. 类加载器Classloader加载文件

类加载器主要做了三件事情:
1.通过一个类的全限定名获取定义此类的二进制字节流
2.将这个字节流所代表的静态存储结构转换为方法区运行时数据结构
3.在java堆中生成一个代表这个类的java.lang.class对象,作为方法区中这些数据访问的入口.

2) 链接:

1.验证:保证被加载类的正确性,可理解为编译期错误(比如当我们有时候启动项目时,会有些pojo缺包导致启动失败)
2.准备:为类的静态变量分配内存并初始化默认值.
举例:

   private static a = 3   //此时会给静态变量a分配内存,并赋值为默认值0 

此时a的值并不是3.而是0
3.解析:将类中的符号引用转为直接引用.
其实大家打开class文件会发现里面都是十六进制的字节码.类似于这样:
在这里插入图片描述

可以在java官方文档上查到相关的一些东西帮助我们读取这中文件:
在这里插入图片描述
u4表示前四位,magic表示class文件固定开头格式 默认都为cafe babe
再往后两位为最小版本号,图片表示为0000
再往后两位是最大版本号,图片为0034
就不一一说了,大家可以自己查询.

而上面说的符号引用就是这种的引用,直接引用就是我们能够看懂的内容.

3)初始化 :

对类的静态变量初始化操作.
例如刚刚举的例子
private static a = 3
就是在初始化的时候才会将3赋值给变量a.

类加载器

在这里插入图片描述
当我们在加载一个类时,优先会让顶层的加载器加载,当顶层加载器加载成功时,其他的加载器不会再次加载,保证类只被加载一次.

双亲委派机制: 当我们自定义了加载器时,同样也会有顶层的父加载器加载,当自定义的加载器再去加载该类时会发现该类已被加载,则不会再次加载.

Over

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值