美文网首页
JVM底层类加载

JVM底层类加载

作者: 我有清风有烈酒 | 来源:发表于2020-09-07 14:30 被阅读0次

Klass模型

Java中的每个类,在JVM中都有对应的Klass类实例与之对应,储存类的元信息如:常量池、属性信息、方法信息……

Class和Klass的区别:
Class:就是Java类(Java代码);
Klass:Java类在JVM中的存在形式(C++代码)。

Klass类有哪些

  • InstanceKlass:我们写的Java类(非数组类)就是对应的这个类(元信息);
  • InstanceMirrorKlass:镜像类,这个东西就是Class对象(存储在堆区);
  • InstanceRefKlass:用于表示java.lang.ref.Reference的子类;
  • InstanceClassLoaderKlass:用于遍历某个加载器加载的类。

上面说到InstanceKlass是非数组的Java类在jvm中对应的类,那数组类在JVM中对应的是什么呢?

ArrayKlass

数组类Java类,在JVM中以ArrayKlass的形式存在的,存储数组类的元数据。

Java中的数组:
是动态数据类型:运行时动态生成的。

如何证明数组是动态生成的:

通过查看字节码文件:

  • newarray:创建一个指定原始类型(int,float,char……)的数组,并将其引用值压入栈顶。
  • anewarray:创建一个引用类型(如类,接口,数组……)的数组,并将其引用值压入栈顶。

TypeArrayKlass:基本数据类型的数组在JVM中的表现形式;
ObjArrayKlass:引用类型的数组在JVM中的表现形式。


类的加载过程

类的加载过程

需要注意的是,在准备阶段赋初始值分两种情况:

  • 非final修饰,初始值为各个数据了行的初始值,如 int 为 0,double为 0l,引用类型为 null。
  • final修饰的数据,在准备阶段就会直接赋值。

相关文章

网友评论

      本文标题:JVM底层类加载

      本文链接:https://www.haomeiwen.com/subject/mwpkektx.html