Pointer / Referenz - Theorie

yeTh7

Mitglied
Hallo!

Ich verstehe zwar wie man in der Praxis mit dem Thema umgeht, hätte aber eine Grundlagenfrage.

Ich bin vor kurzem zufällig wieder über das "pass by value" Konzept von Java gestolpert und dabei kam mir folgender Gedanke:

Das gegenteilige "pass by reference" Konzept stelle ich mir wie Referenzen in C++ vor. Diese sind (zumindest konzeptionell) wie ein Alias für eine bestimmte Speicheradresse gedacht. Also verweisen beide Variablen auf den selben Speicherbereich. Pointer hingegen beinhalten die Ziel-Adresse selbst in einem eigenem Speicherbereich.

Vermutung: Die allgemeine Zuordnung von alphabetischen Variablennamen (wie wir sie verwenden) zu den tatsächlichen Speicheradressen muss doch in Form irgendeiner Tabelle realisiert sein. Wäre es also nicht performanter, das Pointerkonzept auch direkt dort zu realisieren? Sprich, bei Zuweisung eines Pointers zu einem bestehenden Objekt, einfach einen weiteren Eintrag in der Zuordnungstabelle anlegen.

Beispiel:
a = new Object();
d = a

sähe dann im Speicher so aus:
Variable -> Speicheradresse
a -> 0001
b -> 0002
c -> 0003
d -> 0001

So würde man sich doch das Abspeichern der Speicheradresse in einer eigenen Speicherzelle sparen. Wäre also immer ein Schritt weniger.

Nachdem aber auch in C++ Referenzen (die gedanklich diesem Konzept entsprechen) technisch als Pointer realisiert sind, wird es hier einen guten Grund geben, warum meine Idee keinen Sinn macht.

Kann mir diesen jemand erklären? :)

Danke schonmal im Voraus!
 
K

kneitzel

Gast
Es geht ja nicht nur um das Abspeichern / Aufrufen von Daten. Ein weiterer wichtiger Punkt ist die Freigabe wenn etwas nicht mehr benutzt wird. Somit brauchst du etwas mehr wie den reinen Zeiger ...

Da gibt es übrigens auch einiges an Dokumentation zu ... bin nur gerade auf dem Handy unterwegs .... liefere ich ggf später noch paar Links nach.
 
K

kneitzel

Gast
Bin jetzt etwas schneller als erwartet wieder an meinen Rechner gekommen .... also generell ist es so, dass es in der Spezifikation keine Vorgabe gibt, wie das umgesetzt wird. (Java Virtual Machine Specification 2.7 Object Representation - https://docs.oracle.com/javase/specs/jvms/se13/html/index.html: "The Java Virtual Machine does not mandate any particular internal structure for objects.")

Das, was ich hier jetzt grob umschreibe sowie die Links beziehen sich (so ich auf die Schnelle Nichts übersehen habe) auf die Hotspot Implementation von Oracle, die auch als OpenSource freigegeben wurde (Und so wohl in den meisten VMs verwendet wird).

Da ist dann von oop - ordinary object pointers - die Rede. Und da wird dann noch etwas unterschieden, denn es gibt da diverse Feinheiten, je nachdem, worauf ich verweise. Ist es eine Instanz? Ein Array auf value Werte? Ein Array auf Instanzen, Ein Array auf Typen ... Sieht man etwas, wenn man z.B. auf https://github.com/openjdk/jdk/tree/master/src/hotspot/share/oops schaut. Da sind die Klassen rund um oop.

Aber - das was man dann in erster Linie hat, ist tatsächlich ein Zeiger. Auf 64 Bit Systemen ein 64 Bit Zeiger, auf 32 Bit Systemen ein 32 Bit Zeiger. Aber das wäre zu einfach. Es gibt daher auch noch CompressedOops. Das ist recht interessant - aber anstatt das näher zu erläutern einfach ein paar Links zum selbst lesen.

Das wiki vom openjdk ist recht interessant - das wäre ggf. eine Anlaufstelle, so einen dies wirklich interessiert. Aber ganz wichtig: Da geht es um eine Implementierung nicht in Java. Wer Java entwickeln will, der braucht das garantiert nicht. C++ Entwickler, die sich genau mit der Thematik beschäftigen, die sind hier aber dann durchaus richtig.


Zum Auto fahren musst du nicht wissen, wie die Ventile im Motor, die Du nicht einmal sehen kannst, genau aufgebaut sind. Also incl. so Fakten wie Stabilität / Kräfte, die diese aushalten müssen, wie diese hergestellt werden, wie Werkstoffe hier gehärtet werden müssen um tauglich zu sein, ....
Das kann natürlich sehr interessant sein, aber es hilft nicht beim Auto fahren :)
 

yeTh7

Mitglied
Zum Auto fahren musst du nicht wissen, wie die Ventile im Motor, die Du nicht einmal sehen kannst, genau aufgebaut sind. Also incl. so Fakten wie Stabilität / Kräfte, die diese aushalten müssen, wie diese hergestellt werden, wie Werkstoffe hier gehärtet werden müssen um tauglich zu sein, ....
Das kann natürlich sehr interessant sein, aber es hilft nicht beim Auto fahren :)

Das ist mir schon klar. :)

Dennoch mag ich es, wenn ich die Dinge die ich mache grundlegend verstehe. Dabei muss das nicht bis in die Implementationsschicht genau sein. Konzeptuell reicht.

Ich fand das Pointer Konzept immer sehr schön. Bis ich dann verinnerlichte, dass es evtl ein unnötiger Schritt wäre, wenn man ohnehin mit einer Speichertabelle arbeiten muss.

Aber ich denke sowas in die Richtung wie aus deinem ersten Post könnte Sinn machen. Evtl auch, dass man im Speicher flexibler zusätzliche Informationen ablegen kann? Und die Zuordnungstabelle einfach nur zum Zwecke der Zuordnung verwendet werden soll.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
8 Referenz (Pointer, Zeiger) in Java Java Basics - Anfänger-Themen 9
F Referenz Pointer oder doch nochmal neu suchen ? Java Basics - Anfänger-Themen 2
W Null-Pointer Exception beim Programmstart Java Basics - Anfänger-Themen 8
Detlef Bosau nichtstatische Innere Klasse, this Pointer. Java Basics - Anfänger-Themen 47
W Null-Pointer trotz Konstruktor? Java Basics - Anfänger-Themen 9
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
Orkanson Null Pointer Expception Java Basics - Anfänger-Themen 3
J Pointer Java Basics - Anfänger-Themen 11
C Null Pointer Exception Java Basics - Anfänger-Themen 10
G Null Pointer Exception Java Basics - Anfänger-Themen 4
D OOP Warum bekomme ich eine Null-Pointer Exception!!? :( Java Basics - Anfänger-Themen 4
S Abzählen mit Pointer Java Basics - Anfänger-Themen 2
A Null Pointer Exception in Liste Java Basics - Anfänger-Themen 11
A Methoden "Pointer" als Übergabeparameter Java Basics - Anfänger-Themen 5
L Null Pointer Exception bei setText Java Basics - Anfänger-Themen 9
T Null Pointer Exception Java Basics - Anfänger-Themen 4
G Null Pointer Exeption Java Basics - Anfänger-Themen 8
W Variablen Pointer Grundlagen Java Basics - Anfänger-Themen 30
D Debug Current Instruction Pointer Fehler Java Basics - Anfänger-Themen 8
T Null Pointer Exception Java Basics - Anfänger-Themen 8
H Null Pointer Exception Problem Java Basics - Anfänger-Themen 3
M Sudoku-Löser: Fragen zu Pointer und Rekursion Java Basics - Anfänger-Themen 15
L Null Pointer Exception bei Focus Event bei einem JTextField Java Basics - Anfänger-Themen 2
D Null-Pointer-Exception Java Basics - Anfänger-Themen 5
E Hash Map - Null Pointer Exception? Java Basics - Anfänger-Themen 3
L Pointer per Funktion übergeben Java Basics - Anfänger-Themen 5
B Call By reference (Null pointer exception) Java Basics - Anfänger-Themen 6
J Null Pointer Exception in der "ob Null"-Abfrage? Java Basics - Anfänger-Themen 37
B Null Pointer Exception Java Basics - Anfänger-Themen 7
A Null Pointer Exception beim Erstellen eines Arrays aus einer eigenen Klasse Java Basics - Anfänger-Themen 3
K Null pointer exception in Methode Java Basics - Anfänger-Themen 4
D Null Pointer Exception Java Basics - Anfänger-Themen 8
D null pointer exception Java Basics - Anfänger-Themen 3
M Null Pointer Exception Java Basics - Anfänger-Themen 18
Z Null Pointer?! WHY? Java Basics - Anfänger-Themen 11
T Null Pointer Exception Java Basics - Anfänger-Themen 2
F Null Pointer Exception #2 Java Basics - Anfänger-Themen 5
I Unerklärliche Null-Pointer-Exception bei JRadioButton Array Java Basics - Anfänger-Themen 2
J Null-Pointer -> Code-Zeile ausgeben möglich? Java Basics - Anfänger-Themen 7
H Null Pointer Exception? Java Basics - Anfänger-Themen 4
E Nativen Code verwenden mit Jna, Pointer problem Java Basics - Anfänger-Themen 7
N null pointer exeption problem Java Basics - Anfänger-Themen 4
G Null Pointer Exception Java Basics - Anfänger-Themen 10
C große Matrizen, Performance, (Pointer?) Java Basics - Anfänger-Themen 6
G function pointer Java Basics - Anfänger-Themen 5
N null pointer exception Java Basics - Anfänger-Themen 6
F ArrayList! Pointer, Referenzen! Java Basics - Anfänger-Themen 4
S Null-Pointer-Exception Java Basics - Anfänger-Themen 5
H Null pointer Exeption Java Basics - Anfänger-Themen 4
R Thread geht jetzt - aber - Fehler "Null-Pointer" Java Basics - Anfänger-Themen 20
B Null Pointer Exception Java Basics - Anfänger-Themen 2
S Pointer? Java Basics - Anfänger-Themen 9
L nur kleines null Pointer Exception problem Java Basics - Anfänger-Themen 9
R Null Pointer Exception von anderer Klasse aus. Java Basics - Anfänger-Themen 2
S Vector wirdn icht gefüllt, null Pointer, was ist der Fehler Java Basics - Anfänger-Themen 6
N NULL Pointer Exception Java Basics - Anfänger-Themen 4
J Java.lang Null Pointer Exception Java Basics - Anfänger-Themen 3
Dilandau null pointer exception - woran liegts? Java Basics - Anfänger-Themen 16
Hzrfa Objekte, Referenz Java Basics - Anfänger-Themen 5
I Grundsatzfrage: Belegt eine Referenz auf 'null' RAM, und wenn ja - wieviel ;-) ? Java Basics - Anfänger-Themen 5
O Warum bekommen wir nicht die Referenz vom zurückgegebenen Objekt? Java Basics - Anfänger-Themen 4
P Wie rufe ich Methoden mit einer Referenz auf eine Klasse||Objekt auf Java Basics - Anfänger-Themen 4
C Kopie oder Referenz ? Java Basics - Anfänger-Themen 5
A Binärbaum rekursiv durchsuchen und Referenz zurückgeben Java Basics - Anfänger-Themen 4
B Neue Liste erstellen, wenn Objekte bestimmte Referenz hat / Gruppierung von Einträgen Java Basics - Anfänger-Themen 12
H Referenz Objekt aufrufen Java Basics - Anfänger-Themen 12
D Uebergabe per Referenz Java Basics - Anfänger-Themen 2
O Referenz - toString Java Basics - Anfänger-Themen 9
S This-Referenz Java Basics - Anfänger-Themen 6
F Referenz an ein Objekt in einer anderen Klasse erstellen(Nullpointer exception) Java Basics - Anfänger-Themen 6
I Referenz auf Klasse als Rückgabewert Java Basics - Anfänger-Themen 7
P Datentypen LinkedList: Kopie behält Referenz? Java Basics - Anfänger-Themen 3
J Referenz und Instanzierung Java Basics - Anfänger-Themen 25
I Erste Schritte Referenz zum Knoten davor, in einer Liste Java Basics - Anfänger-Themen 4
M Referenz geht bei Zwischenspeichern verloren (ArrayList) Java Basics - Anfänger-Themen 4
O This-Referenz als Returnwert einer Methode? Java Basics - Anfänger-Themen 13
O This Referenz Java Basics - Anfänger-Themen 3
A top referenz bei queues Java Basics - Anfänger-Themen 1
J Rückgabe als Wert, keine Referenz Java Basics - Anfänger-Themen 3
Q Parameterübergabe - Objekt - Referenz Java Basics - Anfänger-Themen 5
C Dynamische Referenz & abstrakte Klassen Java Basics - Anfänger-Themen 3
V Frage zu Polymorphismus: Objekt der Subklasse in Referenz der Oberklasse Java Basics - Anfänger-Themen 4
T Aufgerufene Methode Inhalt der übergebenen Referenz Java Basics - Anfänger-Themen 5
B Referenz in Java Java Basics - Anfänger-Themen 5
C Referenz auf ein Objekt kopieren! Java Basics - Anfänger-Themen 2
J Methoden Referenz und Speicherplatz für Objekte reservieren Java Basics - Anfänger-Themen 2
M Wie komm ich an die Referenz eines Oberflächenelements Java Basics - Anfänger-Themen 2
A Klassenvariablen Referenz auf ein Objekt Java Basics - Anfänger-Themen 18
M Referenz Frage Java Basics - Anfänger-Themen 12
K OOP Probleme mit Objekt-Referenz in Methode Java Basics - Anfänger-Themen 6
W Die leidige Referenz-Frage Java Basics - Anfänger-Themen 9
B Arraycopy kopiert nur die Referenz?! Java Basics - Anfänger-Themen 3
S Speicheradresse auf die eine Referenz zeigt ausgeben Java Basics - Anfänger-Themen 12
E Compiler-Fehler kann Objekt-Referenz nicht erstellen Java Basics - Anfänger-Themen 3
B Referenz zu anderen Frame Java Basics - Anfänger-Themen 10
Blackskyliner Referenz ähnlicher Zugriff, aber wie? Java Basics - Anfänger-Themen 4
K Klassen this-Referenz und Klassen/Methodenaufruf Syntax Java Basics - Anfänger-Themen 3
C Referenz einer bereits instanziierten Klasse während des Programmablaufs Java Basics - Anfänger-Themen 16
H Objekt holen per Referenz als String. Java Basics - Anfänger-Themen 4
T Referenz einer Variable übergeben Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben