2012-04-18 87 views
0

我最近阅读了关于根据Artima的JVM规范在JVM第二版中的内幕。其中一个章节提到了存储在Java运行时中的类型,它表示:Java虚拟机:类型信息

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

我有点困惑,因为我一直以为Class文件所在的方法区域包含了类型信息。 Java存储类型信息还有其他地方吗?

回答

1

是的,正如它所说an instance of java.lang.Class已创建。这意味着代表类文件的对象被放置在堆上,以及方法区域中的Class文件。

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

+0

是的,但它表示它将REFERENCE与Class文件与类型信息相关联。但类是类型信息,为什么它需要引用自身? – Bober02 2012-04-18 13:19:02

+0

创建的'Class'对象必须包含对方法区域中类数据的引用。两个不同的实体。只有当需要信息时才能在两者之间建立连接。该连接以编程方式不可见。 – Jivings 2012-04-18 13:21:35

+0

因此,当我们尝试在Java中运行'instanceof'时,对象上的指针指向方法区域上的类型数据或类型堆上的单例'Class'对象? – Bober02 2012-04-18 14:14:50