上篇文章讲解了klassKlass的创建过程,本文将Universe::genesis(TRAPS)方法中创建的klass已图的方式进行展示.注意,其创建的方式是一致的,不同的地方是大小不同等.以下先列举一下在该方法中创建的klass.

klass名 作用
klassKlass klass链路的末端
arrayKlassKlass 是所有数组类类的抽象基类
objArrayKlassKlass 是所有objArrayKlass所对应的klass
instanceKlassKlass 是instanceKlass所对应的klass
typeArrayKlassKlass 是typeArrayKlass所对应的klass
symbolKlass 是symbolOop所对应的klass
typeArrayKlass 创建了BOOLEAN,CHAR,Float,DOUBLE,BYTE,SHORT,INT,LONG所对应的数组klass
methodKlass 描述java类的方法
constMethodKlass 描述java类方法所对应的字节码指令信息的固有属性
methodDataKlass 是methodDataOop所对应的klass
constantPoolKlass 描述java字节码文件中的常量池的数据结构
constantPoolCacheKlass constantPool 缓存所对应的klass
compiledICHolderKlass compiledICHolderOop 所对应的klass

解析

arrayKlassKlass

类加载流程003

objArrayKlassKlass

类加载流程003

instanceKlassKlass

类加载流程003

typeArrayKlassKlass

类加载流程003

symbolKlass

类加载流程003

typeArrayKlass

类加载流程003

methodKlass

类加载流程003

constMethodKlass

类加载流程003

methodDataKlass

类加载流程003

constantPoolKlass

类加载流程003

constantPoolCacheKlass

类加载流程003

compiledICHolderKlass

类加载流程003

总结

可以发现,***Klass在创建的时候总是会申请oopDesc::header_size() + sizeof(***Klass)/HeapWordSize 大小的内存空间.并将_metadata 指向klassKlass.

相关文章: