2010-08-10 14 views
6

Wir wissen, dass die Objektreferenzvariable Bits enthält, die eine Möglichkeit darstellen, auf ein Objekt zuzugreifen.Was ist innerhalb einer Referenzvariablen in Java?

Es hält nicht das Objekt selbst, aber es hält so etwas wie einen Zeiger oder eine Adresse.

Ich wurde durch das Head-Erste Java (2. Ausgabe) Buch und in dem Buch geht es geschrieben (in Kapitel 3, Seite 54), dass

In Java, wissen wir nicht wirklich, was ist innerhalb einer Referenzvariablen. Wir tun wissen, dass, was auch immer es ist, es ein und nur ein Objekt darstellt. Und die JVM weiß, wie man die Referenz verwendet, um an das Objekt zu gelangen. -

möchte ich fragen:

  • Sie eine Objektreferenzvariable hält Zeiger, Adresse, oder was?
  • Wie interpretiert JVM das?
+1

Werfen Sie einen Blick auf eine offene Implementierung wie OpenJDK, wenn Sie so neugierig sind :) – KeatsPeeks

+0

Nein, nicht so neugierig :) nur ein Anfänger in Java. –

Antwort

11

Es ist völlig Sache der JVM zu bestimmen, was in eine Referenz geht.

Im einfachsten Fall wäre es nur ein Zeiger (d. H. Eine Adresse). In komplizierteren Fällen kann die VM je nach Situation unterschiedliche Darstellungen verwenden. Sie können beispielsweise das Dokument unter der Nummer "Compressed oops in HotSpot" lesen, um zu sehen, wie die HotSpot VM die Verdoppelung der Größe von Referenzen an einigen (aber nicht allen) Stellen vermeiden kann läuft als 64-Bit-VM.

Wichtig ist, dass Sie weder wissen noch kümmern. Soweit es Sie als Programmierer interessiert, ist es nur ein undurchsichtiger Satz von Bits - sein einziger Zweck ist es, Sie zu dem fraglichen Objekt zu bringen (oder eine Nullreferenz zu identifizieren).

+0

Okay, Danke :) –

3

Das liegt an der JVM. Eine Java-Referenz hat keine garantierte Semantik, außer dass Sie auf ein Objekt zugreifen können. Sunacle könnte dies auch anders als IBM tun.

In der Praxis kann es sich dabei oft um einen Zeiger handeln, allerdings nicht direkt auf das Objekt, da dieses vom GC verschoben werden kann.

+0

Eine legitime Frage wäre "Wie sind Referenzen implementiert in obwohl. – KeatsPeeks

+2

@ Samuel - es hängt davon ab, wie Sie "legitim" definieren. Sofern Sie nicht versuchen, die JVM selbst zu modifizieren, gibt es für diese Information keinen praktischen Nutzen. Neugier ist in Ordnung, aber diese Art von Fragen lässt mich immer denken, dass jemand an einer C-Mentalität festhält. –

2

Es ist vollständig JVM spezifisch. Es kann eine Adresse, ein Zeiger oder etwas komplizierter sein. Sie haben oder brauchen keine härteren Garantien als die Tatsache, dass Sie ein Objekt mithilfe der Referenz erhalten können.

0

Es liegt an der JVM, genau zu entscheiden, wie die Referenz implementiert wird.

Mit dem gesagt, würde jede "vernünftige" Implementierung wahrscheinlich entweder einen direkten Zeiger oder irgendeine Form von komprimierten Zeiger aus Gründen der Leistung verwenden. Ich glaube, das gilt für alle aktuellen Produktions-JVMs.