一尘不染

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

java

作为程序员,我认为它们看起来像“地址为1a234552的java.lang.Object”或类似sin

Object s = "hello";

它是否正确?因此,所有参考均固定大小吗?


阅读 394

收藏
2020-03-22

共1个答案

一尘不染

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

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

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

2020-03-22