类加载流程003

上篇文章讲解了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_第1张图片

objArrayKlassKlass

类加载流程003_第2张图片

instanceKlassKlass

类加载流程003_第3张图片

typeArrayKlassKlass

类加载流程003_第4张图片

symbolKlass

类加载流程003_第5张图片

typeArrayKlass

类加载流程003_第6张图片

methodKlass

类加载流程003_第7张图片

constMethodKlass

类加载流程003_第8张图片

methodDataKlass

类加载流程003_第9张图片

constantPoolKlass

类加载流程003_第10张图片

constantPoolCacheKlass

类加载流程003_第11张图片

compiledICHolderKlass

类加载流程003_第12张图片

总结

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

你可能感兴趣的:(openjdk,openjdk)