知识铺: 致力于打造轻知识点,持续更新每次的知识点较少,阅读不累。不占太多时间,不停的来唤醒你记忆深处的知识点。
Java对象模型 - Klass Word
一、OOP-Klass
1. Klass Word: 是java对象模型中的头部信息,用来描述java类,和虚拟机中的Java类型结构相对应着。
2. 占用的长度: 32位JVM ,占用为32位, 64位JVM,占用为64位。
3. 内存消耗: 64位JVM的内存占用多了50%, 后期JVM为了节省空间,可以使用参数+UseCompressedOops, 开启指针压缩。这里就成OOP-Klass
4. oop: ordinary object pointer 被压缩后的的指针类型,普通对象指针。
5.被压缩指针: 静态变量指针,对象变量指针,数组元素指针
二、OOP-Klass体系
2.1 作用:
1.OOP 普通对象指针,指向的是一各实例
2. Klass 实例头部描述信息,具体包含 元数据和方法信息
3. 避免虚函数表头。
2.2 模块:
多模块,每个模块对应一个类型,也代表着JVM内部会创建对应的OOP对象。
2.3 模块分类:
1. 基类 typedef class oopDesc* oop;
2. 实例 typedef class instanceOopDesc* instanceOop;
3. 方法 typedef class methodOopDesc* methodOop;
4. 方法中静态信息 typedef class constMethodOopDesc* constMethodOop;
5.数据结构:typedef class MethodDataOopDesc* methodDataOop;
6. 数组对象 typedef class arrayOopDesc* arrayOop;
7.对象的数组 typedef class objArrayOopDesc* objArrayOop;
8.基本类型的数组 typedef class typeArrayOopDesc* typeArrayOop;
9.常量池 typedef class constantPoolOopDesc* constantPoolOop;
10.常量池缓存 typedef class constantPoolCacheOopDesc* constantPoolCacheOop;
11.Java类对等的C++类 typedef class klassOopDesc* klassOop;
12.对象头 typedef class markOopDesc* markOop;
2.4 Klass体系
Hotspot JVM 设计对象结构, 分为 Klass 和 oop 两个模块。
2.4.1 oop 实例的数据,不包含虚函数。
2.4.2 klass 实现虚函数多态,提供虚函数表。
2.4.3 每一个实例在JVM都创建一个Java类的instanceKlass对象对应着。
2.4.4 oop->klassOop->KlassKlass 对应关系