
klass模型
Java的每个类,在JVM中,都有一个对应的Klass类实例与之对应,存储类的元信息如:常量池、属性信息、方法信息……
看下klass模型类的继承结构

从继承关系上也能看出来,类的元信息是存储在元空间的
普通的Java类在JVM中对应的是instanceKlass类的实例,再来说下它的三个子类
1、InstanceMirrorKlass:用于表示java.lang.Class,Java代码中获取到的Class对象,实际上就是这个C++类的实例,存储在堆 区,学名镜像类;
2、InstanceRefKlass:用于表示java/lang/ref/Reference类的子类
3、InstanceClassLoaderKlass:用于遍历某个加载器加载的类
Java中的数组不是静态数据类型(静态数据类型就是JVM内置的,八种基本数据类型),是动态数据类型,即是运行期生成的,Java数组的元信息用ArrayKlass的子类来表示:
1、TypeArrayKlass:用于表示基本类型的数组
2、ObjArrayKlass:用于表示引用类型的数组
运行时数据区

堆



标记清除算法

复制算法

标记整理算法

网友评论