Speicheradresse auf die eine Referenz zeigt ausgeben

StabiloSpider

Neues Mitglied
Hallo @ all!

Ich würde gerne die Speicheradresse einer Referenz bzw. eines Objektes auf der Konsole ausgeben lassen.

Hab ich in JAVA die Möglichkeit dies zu bewerkstelligen? ???:L

Für eure Antworten vielen Dank!
 
Vielleicht findest du irgendwelche internen Klassen von Sun, welche das bewerkstelligen können. Aber eigentlich geht das nicht, da sich alleine die JVM um den Speicher kümmert. Für was willst du so was?
 
wie genau definiert sich Speicheradresse? reicht ein beliebiger Pseudowert wie hashCode()?
 
Es ist eigentlich nicht Sinn von Java sich mit Speicheradressen Speicherarithmetik und Ähnlichem zu beschäftigen. Wie "faetzminator" schon angemerkt hat, kümmert sich die JVM um die Speicherverwaltung.
 
Zunächst einmal Danke für eure schnelle Antwort. :toll:

Mir geht es im Grunde darum, herauszubekommen wie ein Objekt einer Klasse im Speicher angeordnet wird. (Ich weiss, eigentlich kann mir das egal sein, aber ich interessiere mich dafür).

D.h., erzeuge ich eine Objekt einer KlasseA (KlasseA r = new KlasseA(); ), ist r eine Variable vom Referenzdatentyp KlasseA und gleichzeitig meine symbolische Adresse. In der Speicherzelle von r, steht nun eine Referenz (Verweis) auf eine weitere Speicherzelle (bspw. Speicherzelle 104) in der sich mein eigentliches Objekt befindet.

Angenommen KlasseA hält ein Attribut vom Typ byte und ein Attribut vom Typ int. Sind diese beiden Datentypen nun nacheinander im Speicher angeordnet, d.h. r verweist auf das erste Bit meiner byte Variablen (somit auf Speicherzelle 104) und im Anschluss (also in der nächsten Speicherzelle) finde ich meine zweite int-Variable ?????? ODER sind beide Variablen in irgendeiner Speicherzelle im Speicher angeordnet ???:L
 
Zuletzt bearbeitet von einem Moderator:
Dann wirst du dir wohl mal die Implementierung einer JVM ansehen müssen.

Alternativ könntest du Assembler lernen; da lässt sich herausfinden, was wo abgelegt ist.
 
Zunächst einmal Danke für eure schnelle Antwort. :toll:

Mir geht es im Grunde darum, herauszubekommen wie ein Objekt einer Klasse im Speicher angeordnet wird. (Ich weiss, eigentlich kann mir das egal sein, aber ich interessiere mich dafür).

D.h., erzeuge ich eine Objekt einer KlasseA (KlasseA r = new KlasseA(); ), ist r eine Variable vom Referenzdatentyp KlasseA und gleichzeitig meine symbolische Adresse. In der Speicherzelle von r, steht nun eine Referenz (Verweis) auf eine weitere Speicherzelle (bspw. Speicherzelle 104) in der sich mein eigentliches Objekt befindet.

Angenommen KlasseA hält ein Attribut vom Typ byte und ein Attribut vom Typ int. Sind diese beiden Datentypen nun nacheinander im Speicher angeordnet, d.h. r verweist auf das erste Bit meiner byte Variablen (somit auf Speicherzelle 104) und im Anschluss (also in der nächsten Speicherzelle) finde ich meine zweite int-Variable ?????? ODER sind beide Variablen in irgendeiner Speicherzelle im Speicher angeordnet ???:L

Dir ist aber schon klar, dass sich eine Millisekunde nach Ausgabe die Speicherposition durch einen GC ändern kann?
 
Dir ist aber schon klar, dass sich eine Millisekunde nach Ausgabe die Speicherposition durch einen GC ändern kann?

sorry ... aber das glaub ich irgendwie nicht da der GC eigentlich nur dazu da ist nicht mehr referenzierte objekte aufzuräumen ...

so lange du bis zum untersten element eine referenz-kette bilden kannst ändern sich die speicher-adressen nicht ...

@TO
es ist eigentlich nicht im sinne von java mit stack-pointern um sich zu schlagen ...
intern muss die VM das zwar um mit der speicher-verwaltung des OS klar zu kommen ...
aber für den normalen byte-code ist dies glaube ich so gut wie nicht möglich ...
höchstens über reflections in klassen wie Object oder Class versuchen mit den native-methoden rum zu experimentieren ... oder wie schon angedeutet mit klassen in com.sun bzw sun.* ... aber selbst wenn : was hast du dann damit vor ? verändern wirst du diese schlecht können ...
 
sorry ... aber das glaub ich irgendwie nicht da der GC eigentlich nur dazu da ist nicht mehr referenzierte objekte aufzuräumen ...

so lange du bis zum untersten element eine referenz-kette bilden kannst ändern sich die speicher-adressen nicht ...

Lese mal nach wie Generational Garbage Collectors funktionieren. In der Compact-Phase werden die Objekte umkopiert um der Speicher-Fragmentierung entgegen zuwirken.
 
hmm k ... man lernt nie aus ... *wobei das mit der fragmentierung sehr logisch klingt*

aber alleine das zeigt doch schon das man von speicherarithmetik in java die finger lassen sollte ...
 

Neue Themen


Zurück
Oben