繁体   English   中英

Java中的引用变量里面有什么?

[英]What's inside a reference variable in Java?

我们知道对象引用变量包含表示访问对象的方式的位。

它不包含对象本身,但它包含指针或地址之类的东西。

我正在阅读Head-First Java(第2版)的书,并在书中写了(在第3章,第54页)

在Java中,我们并不真正知道引用变量中的内容。 我们确实知道无论它是什么,它代表着唯一的一个对象。 并且JVM知道如何使用引用来获取对象。 -

我想问问:

  • 对象引用变量是否包含指针,地址或什么?
  • JVM如何解释这一点?

完全取决于JVM来确定引用内部的内容。

在最简单的情况下,它只是一个指针(即一个地址)。 在更复杂的情况下,VM可能会根据具体情况使用不同的表示形式 - 例如,您可能希望阅读有关“HotSpot中的压缩oops”的文章,以了解HotSpot VM如何避免在某些情况下将引用的大小加倍(但是并非全部)作为64位VM运行时的位置。

重要的是你既不知道也不关心。 就你作为程序员而言,它只是一组不透明的位 - 它的唯一目的是让你到达有问题的对象(或识别一个空引用)。

这取决于JVM。 除了可以通过它访问对象之外,不保证Java引用具有任何语义。 Sunacle也可能与IBM有所不同。

在实践中,它可能经常是某种指针,但可能不是直接指向对象,因为它可以由GC移动。

它完全是JVM特有的。 它可能是地址,指针或更复杂的东西。 除了可以使用引用获取Object之外,您没有或不需要任何更难的保证。

由JVM决定如何实现引用。

话虽如此,出于性能原因,任何“理智”的实现都可能使用直接指针或某种形式的压缩指针。 我相信这适用于所有当前生产的JVM。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM