2010-01-11 22 views
1

内部来讲,当你施放一个目标是像一个强类型的对象:当您取消装箱对象时,对象数据类型的存储位置在哪里,以便编译器可以执行强制转换?

User u = (User)o; 

在哪里存储对象的类型?它是否存储在另一个位置或实际对象存储的内存块中?

(我不知道很多关于这个话题,所以我很可能会问一个问题,不会使完整意义上的,但我希望你得到它的要点)

+0

鸡蛋里挑骨头 - 编译器不进行类型转换。 – 2010-01-11 16:08:17

回答

3

每头对象包含对最派生的实现类的类型的引用。很像C++中的“vtbl”。通常这将是一个“C”结构而不是Java对象。我相信Azul的(64位)Hotspot版本使用32位紧凑指针来缩短标头大小。

0

如果不详细说明,Java类的内部表示有一个名为constant pool的存储类和方法的描述符。这些符号链接最初是根据需要解析的(即在第一次访问时)。

从JVM规范,描述连接:

链接是采取一个类或接口 类型的 二进制形式并将其组合成Java虚拟机的运行时 状态的过程,所以它可以执行的 。一个类或 接口类型始终在链接的 之前加载。

因此,引用类型的实际类型信息与您引用它的类别分开存储。

如果你有兴趣,这里是什么类的信息看起来像一个链接:http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html#1221

相关问题