簡體   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