45 java
作为一个程序员,我认为这些是寻找像"java.lang.Object中的地址1a234552"或类似的相似s的
Object s = "hello";
Run Code Online (Sandbox Code Playgroud)
它是否正确?因此所有引用都是固定大小的?
Jon*_*eet 57
虽然在许多VM上,引用的大小是本机指针大小(即32位JVM为32位,64位JVM为64位),但这并不能保证 - 特别是HotSpot现在或者很快就会支持"压缩的糟糕"是64位JVM中的32位引用.(这并不意味着每个引用都被压缩 - 阅读链接的文章以获取更多信息,并且还有大量关于它的博客文章.)
在回应另一条评论时,请注意引用本身通常只是解决对象本身的一种方式.无论它是否是直接内存指针,其目标都是获取对象的数据.这基本上就是真正重要的事情.如果有一些"备用"位(例如,它是64位引用,并且您不需要所有宽度来表示对象的位置),则VM可以将该数据用于其他信息,例如其类型,这可能允许一些优化.(有关详细信息,请参阅Tom的评论.)
Class在你到达用户之前,对象本身包含类型信息(可能是对实例的引用形式,或类似的东西 - 我不太了解)以及标题中的其他必要"东西"对象的数据.
它不是JLS或JVM Spec的一部分,但实际上它将是一个地址:32位CPU为32位,64位为64位.
pqism:好的,你知道,因为在编译后我们不再关心声明的类型了吗?
我们关心.这就是Class对象的原因.实际上,从其他答案中可以看出,我们关注运行时类型,足以通过将部分类型信息引入参考来优化我们使用它们的方式.
| 归档时间: |
|
| 查看次数: |
29568 次 |
| 最近记录: |