JVM的OOP-KLASS模型

193 篇文章 9 订阅
107 篇文章 0 订阅

在JVM中,使用了OOP-KLASS模型来表示内存中的java对象。

InstanceKlass:
jvm在加载解析.class文件完成后,创建InstanceKlass对象,表示其元数据,包括类型信息,字段信息、方法信息,常量池等。InstanceKlass对象存放在方法区中,InstanceKlass是jvm中的数据结构,供jvm内部使用,HotSpot并不把InstanceKlass暴露给Java开发者,Java开发者使用的是java.lang.Class对象,JVM将java.lang.Class对象称为 _java_mirror,即Class对象是InstanceKlass对象的“Java镜像”。InstanceKlass对象持有对Class对象的引用(_java_mirror便是InstanceKlass持有的对Class对象的引用)

OOP
Ordinary Object Pointer,普通对象指针。
Klass是在.class文件在加载过程中创建的,OOP则是在Java程序运行过程中new对象时创建的。
一个OOP对象包含以下几个部分:

  • instanceOopDesc(描述对象头的数据结构),包括:
    1)Mark Word,主要存储对象运行时的记录信息,如hashcode, GC分代年龄,锁状态标志,线程ID,时间戳等;
    2)元数据指针,即指向方法区的instanceKlass实例;
  • 实例数据

new操作返回的对象的instanceOopDesc类型指针中的元数据指针就是指向instanceKlass,而instanceKlass指向了对应的类型的Class实例。

简单说,比如有个Person类,则Person类的实例——>Person的instanceKlass——>Person的Class。

从源码角度分析java.lang.Class对象

参考:
Class实例在堆中还是方法区中?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值