java虚拟机:类型信息

java虚拟机:类型信息,java,jvm,virtual-machine,Java,Jvm,Virtual Machine,我最近在JVM第二版中阅读了Artima关于JVM规范的文章。其中一章提到了Java运行时中的类型存储,它说: java虚拟机为其加载的每种类型创建类java.lang.class的实例。虚拟机必须以某种方式将对类型的类实例的引用与方法区域中的类型数据相关联 我有点困惑,因为我一直认为Class文件位于包含类型信息的方法区域中。Java是否还有其他存储类型信息的地方?是的,正如它所说的,创建了Java.lang.Class的一个实例。这意味着表示类文件的对象以及方法区域中的类文件被放置在堆上 这

我最近在JVM第二版中阅读了Artima关于JVM规范的文章。其中一章提到了Java运行时中的类型存储,它说:

java虚拟机为其加载的每种类型创建类
java.lang.class
的实例。虚拟机必须以某种方式将对类型的类实例的引用与方法区域中的类型数据相关联


我有点困惑,因为我一直认为
Class
文件位于包含类型信息的方法区域中。Java是否还有其他存储类型信息的地方?

是的,正如它所说的,
创建了Java.lang.Class的一个实例。这意味着表示类文件的对象以及方法区域中的
文件被放置在堆上


这是在对象上调用
getClass()
时返回的
Class
对象。

是的,但它表示将对类文件的引用与类型信息相关联。但是类是类型信息,为什么它需要引用自身?创建的
Class
对象必须包含对方法区域中类数据的引用。两个不同的实体。这只是为了在需要信息时在两者之间建立联系。连接在编程上不可见。因此,当我们尝试在Java中运行
instanceof
时,对象上的指针指向方法区域上的类型数据或该类型堆上的单例
Class
对象?我非常确定
instanceof
只使用堆上的
Class
对象。它将比较两个
Class
对象,看它们是否相同。对方法区域的引用仅在JVM内部用于执行操作,例如从常量池或方法解析中获取项。