[转帖]Java知识进阶-程序员未接触的知识点之对象模型Klass Word-知识铺

Java知识进阶-程序员未接触的知识点之对象模型Klass Word-知识铺 

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 对应关系

返回搜狐,查看更多

猜你喜欢

转载自www.cnblogs.com/jinanxiaolaohu/p/12889932.html