JVM源码实战 - OOP-Klass模型
> Github原文链接 1 OOP-Klass(Ordinary Object Pointer)模型 OOP-Klass模型用来描述class的属性和行为 设计为OOP和Klass两部分是因为不希望每个对象都有一个C ++ vtbl指针, 因此,普通的oops没有任何虚拟功能。 相反,他们将所有“虚拟”函数转发到它们的klass,它具有vtbl并根据对象的实际类型执行C ++调度。 1.1 OOP oopDesc是对象类的最高父类。 {name}Desc类描述了Java对象的格式,可从C++访问这些字段 路径: /hotspot/share/oops/oop.hpp 完整的类层次结构,请阅读 src/hotspot/share/oops/oopsHierarchy.hpp OOP体系 1.2 Klass Klass体系 Klass对象提供 语言级别的类对象(方法字典等) 为对象提供虚拟机调度行为 class Klass : public Metadata { friend class VMStructs; friend class JVMCIVMStructs; protected: // 如果添加指向任何元数据对象的新字段,则必须将此字段添加到Klass :: metaspace_pointers_do() // 注意:在klass结构的起始处将常用字段放在一起