为了账号安全,请及时绑定邮箱和手机立即绑定

Java中的对象引用有多大?它包含什么信息?

Java中的对象引用有多大?它包含什么信息?

慕虎7371278 2019-12-13 15:10:14
作为程序员,我认为它们看起来像“地址为1a234552的java.lang.Object”或类似sinObject s = "hello";这个对吗?因此,所有参考均固定大小吗?
查看完整描述

3 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

虽然在许多VM上,引用的大小是本机指针的大小(即32位JVM的32位和64位JVM的64位),但不能保证-特别是HotSpot现在或不久将支持“ “压缩的糟糕”,这是64位JVM中的32位引用。(这并不意味着每个参考都经过压缩-请阅读链接的文章以获取更多信息,并且还有很多与此相关的博客文章。)


在回应另一条评论时,请注意,引用本身通常只是解决对象本身的一种方式。无论它是不是直接的内存指针,它的目标都是获取对象的数据。基本上,这才是真正重要的。如果有一些“备用”位(例如,它是一个64位引用,而您并不需要全部宽度来表示对象的位置),则VM可以将该数据用于其他信息,例如其类型,这可能允许一些优化。(有关更多详细信息,请参见Tom的评论。)


对象本身包含类型信息(可能以对的实例的引用Class或类似的形式-我不太了解),以及在到达用户之前在标头中包含其他必要的“内容”对象的数据。



查看完整回答
反对 回复 2019-12-14
?
手掌心

TA贡献1942条经验 获得超3个赞

它不是JLS或JVM Spec的一部分,但实际上它是一个地址:32位CPU上的32位,64位上的64位。


pqism:好的,因为在编译之后,我们不再关心声明的类型了吗?


我们在乎。这就是为什么Class对象在那里的原因。实际上,从其他答案中您可以看到,我们对运行时中的类型足够重视,可以通过将部分类型信息作为参考来优化我们使用它们的方式。


查看完整回答
反对 回复 2019-12-14
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

对象引用的大小取决于JVM和机器体系结构。通常,在32位计算机上为32位,在64位计算机上为64位。但是,我认为OpenJDK 7 JVM将支持“压缩指针”,这将在64位计算机上节省一些空间。

有关对象类型的信息存储在对象本身中。也就是说,如果遵循该对象的32位或64位指针(或更可能是句柄),则会找到另一个指向Class描述该类型以及该对象的数据字段的实例的指针。



查看完整回答
反对 回复 2019-12-14
  • 3 回答
  • 0 关注
  • 415 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信