JVM1--oop-klass模型

Metadata–>元数据,用于描述数据的数据。或者说是用于提供某种资源有关信息的数据结构。
简单的理解,元数据和java中的实体类类似,抽象出一类东西所具有的的特征,利用这些特征区分同一类东西的不同属性。

类加载器将.class文件加载进系统,将.class文件解析,生成的是什么?类的元信息在JVM中是如何存储的?
也就是说oop-klass模型,就是jvm用于存储类加载器加载、解析.class文件的“实体类”。

在这里插入图片描述

InstanceKlass–>表示的是java类(非数组,数组的),表示java类在jvm中对用的实例。用于存储元信息。

InstanceMirrorKlass(镜像类)–>存储Class对象(堆区)

InstanceRefKlass–>存储引用(强软弱虚),因为在垃圾回收中不同引用有不同的处理方法。

InstanceClassLoaderKlass–>官方是这个么解释的,这个klass没有添加任何字段。这个InstanceClassLoaderKlass的作用是,为了遍历这个类装载器指向的类装载器键的依赖项。简单的理解是遍历存储已经加载的类。

类加载的过程
加载–>验证–>准备–>解析—>初始化—>使用—>卸载

加载
1、通过类的全限定名获取存储该类的instanceKlass
2、解析成运行时数据,instanceKlass实例,存放在方法区
3、在堆区生成该类的class对象,即instanceMirrorKlass

验证
格式验证,字节码验证,符号引用验证

准备
为静态变量分配内存并赋初值、实例变量是在创建多对象完成赋值的所以没有赋初值一说。
而如果是被final修饰的,是没有赋初值这一步的,直接就赋值。这也就是为啥final变量要在定义的时候就赋值的原因。

解析
把间接引用–>直接引用
间接引用是指向运行时常量池的引用
直接引用是内存地址。

间接引用如下
在这里插入图片描述直接引用如下
在这里插入图片描述
常量池
在这里插入图片描述

初始化
执行静态代码块,给静态变量赋值

静态的执行是按照顺序的。方法中语句的先后顺序与代码的编写顺序相关。
使用
卸载

那jvm是怎么加载类的。

jvm加载类懒加载。

例如同一个jar包下的类,会先预加载常用的类,图String、Integer等

静态变量放在镜像类中

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值