OOP-Klass对象系统:JVM内部的Java类实现

  • JVM是基于C++实现的,故Java的每个类被JVM加载之后,需要使用一个C++的对等体来维护,同时Java对象实例也需要在C++中能够被访问,JVM的实现机制为OOP-Klass。
  • OOP:普通对象指针,用来描述对象实例信息;
  • Klass:Java类的C++对等体,用来描述Java类信息。

对象实例在内存的组成

  • 包含对象头和实例数据两部分,内存结构为连续内存。对象头包含:
    1. Mark Word记录对象的运行时状态信息(哈希码,GC分代年龄,锁状态标志,线程持有的锁,偏向线程ID,偏向时间戳等),如下:
      JVM类和对象体系设计
    2. 元数据指针:指向该对象实例所属类对应的Klass对象instanceKlass,其中Klass对象instan ceKlass存储了该对象实例所属类的元数据信息,存放在方法区中。虚拟机在运行过程中通过该klass对象指针去方法区获取对应的类型信息。
  • 整体结构如下:

JVM类和对象体系设计

  • 优化对象头的内存占用:-XX:UseCompressedOops,对对象头的元数据指针进行压缩,如在64位JVM系统中,使用32位来存储。默认为false未开启。

对象引用,对象实例与对象所属类的关系:JVM对象访问机制

  • 对象引用oop位于栈中,对象实例(包含对象头和实例数据,其中实例数据为对象实例的字段数据)位于堆中,对象所属类的类对象instanceKlass(包含对象方法和类变量等信息)位于方法区中。
    JVM类和对象体系设计

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-25
  • 2022-01-11
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-12-18
  • 2022-12-23
  • 2021-06-19
  • 2021-09-09
  • 2021-11-03
相关资源
相似解决方案