我们说的实例和类通常是语法层面上的,那么JVM在内存中还是需要一种存在形式:OOP-Klass模型。
简单来说,对象占据了内存,类也占据了内存,他们都需要一种在内存空间的表现形式:
1、对象 -> JVM中的对象实例;
2、类 -> JVM中的类实例;
OOP:对象内存布局如下:
Mark Word:主要用于存储对象运行时数据,比如:GC分代年龄;
元数据指针:指向对象对应的类;
实例数据:存储字段信息等,包含超类的信息(所以继承机制事实上是拷贝了超类的数据)
Klass则是class在JVM中的对等体。
OOP和Klass是相互对立却又相互联系的模块,那么我们可以想一下,Java的反射机制中是如何通过一个对象获取其类型的呢?
1、首先我们栈中有一个对象的引用;
2、这个引用指向了堆区内存对象;
3、然后通过对象的元数据指针指向了方法区中的类型;