JVM | OOP-Klass 二分模型

本贴最后更新于 1523 天前,其中的信息可能已经时移俗易

本文知识点

  • OOP 和 klass 的概念
  • OOP 和 Klass 源码
  • HSDB 的 启动

OOP 和 klass 的概念

OOPS: 即普通对象指针,用来描述对象实例信息

Klass: Java 类的 C++ 对等体,用来描述 Java 类

总体上是多个 OOP 和一个 Klass 是对应的。 相当于一个类可以有多个实例

A a = new A() ; A a1 = new A();

a,a1 分别对应着不同的 OOP, 对应着同一个 Klass

OOP 和 Klass 源码

OOP 中有很多模块,

其中最常用的是

instanceOop , 表示一个 Java 类型实例

oopsHierarchy: 描述了对象的表示层次,描述了 klass 的表示层次,并为 OOPS 指针 oopDesc* 定义了别名

markOop: 表示对象头

Klass 中对应的是:

instanceKlass : 在虚拟机层面描述一个 Java 类

OOP 源码

首先看 oopsHierarchy.hpp 文件中,可以看到在 OpenJDK 的源码中都是用 oopDesc* 等 Desc* 来表示的。

jwvpgQ

在虚拟机内部,通过 instanceOop 来表示一个 Java 对象,对象在内存中的布局可以分为连续的两部分, instanceOopDesc 和实例数据

其中 instanceOopDesc 中有:

friend class VMStructs;
friend class JVMCIVMStructs;
private:
// 看 MarkOop 的内容
volatile markOop _mark;
union _metadata {
// 看下面 instanceKlass 的内容
Klass*   _klass;
narrowKlass _compressed_klass;
} _metadata;

MarkOop 对象头里面的东西

在 markOopDesc 中, 我们可以看到对 32 位和 64 位的对象头是分开定义的,

32 位/64 位的 markOop 中的格式如下图所示,对不同的对象,有不同的布局。

XyANzb

hash: 保存对象的哈希码
age: 保存对象的分代年龄
biased_lock: 偏向锁标识位
lock: 锁状态标识位
JavaThread* 保存持有偏向锁的线程 ID
epoch: 保存偏向时间戳

instanceKlass

klass: 元数据指针, 包含了实例对象所属类型的元数据, 虚拟机在运行时,会频繁到本地内存中去找类的描述信息(jdk1.8 之后)

instanceKlass 继承于 Klass,两者一起描述了类所共有的信息,如类名称

Klass 中的主要字段

btqzoc

如上图所示,有类名称, 父类, 子类,类加载器等信息,即使没有 C++ 语言基础,看到这些名字也能猜出来大致意思

instanceKlass 在原有 klass 的基础之上多了注解,常量信息,下面截图只是一部分,但是我把文件名还有行号都截出来了, 本文只做抛砖引玉之用,还需要大家下载源码,跟着一步步自己去学习!

gnbFMd

HSDB

本文使用的都是 jdk11, jdk8 的启动方法网上一大堆,可自行百度。

HSDB 是调试虚拟机极其有用的一款内置工具,自 JDK9 及以后,启动方式稍有些变化,首先确定自己的 jdk 版本,我现在的是 11.0.2,如下:

Vd1o7k

启动方式是: jhsdb hsdb

5MDbue

输入 jvm 进程号点 OK 就可以看到 jvm 内部一些信息,如下图所示

Dbrcag

总结

这篇以概念为主,记得在看《深入理解 Java 虚拟机-jvm 高级特性与最佳实践》这本书时,这些概念看一遍忘一遍, 还是要看源码, 这样印象才会深刻些, 大家加油!

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3165 引用 • 8206 回帖
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖 • 2 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...