Speicherverbrauch Objekt-Referenz

B

bananenkasper

Gast
Hallo zusammen,

vermutlich ist es viel zu offensichtlich, konnte es bisher per Google nicht definitiv klären:
Wie viel Speicherplatz verbraucht eine Referenz auf ein Objekt?
Also nicht das Objekt selbst, sondern nur eine Referenz auf das Objekt.

Ich vermute mal dass es in einem 32bit-System 32 bit also 4 byte sind?
Unterscheidet sich der verbrauchte Speicher in 32/64 bit Systemen?

Grüße
 
Zuletzt bearbeitet von einem Moderator:

XHelp

Top Contributor
Java läuft ja mit VM. Du benutzt also nicht den gesamten Speicher, sondern nur den Heap, der dir zur verfügung stellt.
Wie das Java-spezifisch geregelt ist, kann ich dir auf anhieb nicht sagen. Da wirst du aber vermutlich in der Java language specification fündig. Aber ich denke mal, dass es auf eine logische Adresse hinausläuft.

Es gibt ja 2 Arten von Speicheradressen: logisch und physikalische.
Physikalische ist das, womit man direkt auf den Speicher zugreift.
Aber aus Sicherheitsgründen und Bequemlichkeit gibt es auch die logischen Adressen. Das sind die Adressen, die ein Programm sieht. Da hast du dann eine Seitennummer und Offset. Jede Seitennummer stellt eine Basisadresse dar, die aber aus Platzgründen ausgelagert wird. Diese Basisadresse wird dann um "Offset" verschoben und so bekommst du die physikalische Adresse.
Am besten schappst du dir irgendeine Literatur über Betriebsysteme, wo Speicherverwaltung behandelt wird. Da wird es vermutlich anschlaulicher beschreiben sein.

Bei 32bit-Systemen ist eben der Seitenrahmen 32 bit. (dadurch kommt ja auch die 4 GB grenze an Speicher). Und die virtuelle Adresse ist dann 4b groß. Bei 64 bit Systemen ist es eben 64 bit groß. Von daher gibt es da schon einen unterschied.
 
B

bananenkasper

Gast
Also um es nochmal deutlich zu machen:
Eine Referenz auf ein Objekt verbraucht 4byte Speicher.

Googlen ist manchmal nicht so einfach ;)
 

tfa

Top Contributor
Kann ich mir nicht vorstellen. Zumindest nicht bei VMs die als JAVA-Konform zertifiziert sind.

Ich hab in den VM-Specs nichts entsprechendes gefunden. Die Spezifikation lässt allerdings einige Freiheiten zu, z.B.:

3.4
The Java virtual machine specification does not mandate a concrete value encoding null.

3.7
The Java virtual machine does not mandate any particular internal structure for objects.

Das sind Implementierungsdetails. Die Größe von Referenzen ebenso. Wie schon angesprochen gibt es sicherlich Unterschiede zwischen 32- und 64-Bit-Systemen.

Normalerweise kann einem das als Entwickler auch völlig egal sein. Keine Ahnung, warum der TS das wissen möchte.
 

Sonecc

Gesperrter Benutzer
Danke für die Infos. (Das Unterschiede zwischen 32 und 64 Bit bestehen sollte denke ich klar sein, wird aber auch im anderen Thema angesprochen und hier ebenso)
 
B

bananenkasper

Gast
Normalerweise kann einem das als Entwickler auch völlig egal sein. Keine Ahnung, warum der TS das wissen möchte.

Warum sollte es dem Entwickler egal sein wie viel Speicher sein Programm verbraucht?

Die konkrete Problemstellung in diesem Fall:
Gegeben ist eine sehr lange Sequenz von Symbolen S aus einem Alphabet A = {a, b, c}.
Diese Sequenz nun als Collection<S> in den Speicher laden, oder doch lieber ein char-Array?
Vielleicht auch die Symbole auf eine byte-Array mappen?
a -> 0x00a, b -> 0x00b, c -> 0x00c.

Bei Sequenzen von mehreren hundert Millionen Zeichen denkt man über solche Fragestellungen nach...
 

ice-breaker

Top Contributor
Nur das man bei solchen Sequenzen sicherlich nicht einfach nur die Sequenzen irgendwie im Arbeitsspeicher halten will, sondern mit diesen arbeiten muss.
Und da ist da dann der Speicherverbrauch "irrelevant" weil die Laufzeit der Operationen viel wichtiger wird. Zumal man bei solchen Anforderungen (mehrere hundert Millionen Zeichen sind schon in der platzsparendsten Form hunderte MB) dann auch von viel verfügbaren Speicher ausgehen können muss.
 
M

maki

Gast
Warum sollte es dem Entwickler egal sein wie viel Speicher sein Programm verbraucht?

Die konkrete Problemstellung in diesem Fall:
Gegeben ist eine sehr lange Sequenz von Symbolen S aus einem Alphabet A = {a, b, c}.
Diese Sequenz nun als Collection<S> in den Speicher laden, oder doch lieber ein char-Array?
Vielleicht auch die Symbole auf eine byte-Array mappen?
a -> 0x00a, b -> 0x00b, c -> 0x00c.

Bei Sequenzen von mehreren hundert Millionen Zeichen denkt man über solche Fragestellungen nach...
Dann ist die größe einer einzelnen Referenz doch egal, es kommt auf die Gesamtgröße an, inkl. Collection bzw. Array.

[JavaSpecialists 029] - Determining Memory Usage in Java

Jedenfalls richtet kommt da noch mehr hinzu als nur der Speicherverbrauch, wie ice-breaker bereits sagte, ist die Laufzeit und u.U. das verhalten unter mehreren threads auch relevant.
 
B

bananenkasper

Gast
Nur das man bei solchen Sequenzen sicherlich nicht einfach nur die Sequenzen irgendwie im Arbeitsspeicher halten will, sondern mit diesen arbeiten muss.
Und da ist da dann der Speicherverbrauch "irrelevant" weil die Laufzeit der Operationen viel wichtiger wird. Zumal man bei solchen Anforderungen (mehrere hundert Millionen Zeichen sind schon in der platzsparendsten Form hunderte MB) dann auch von viel verfügbaren Speicher ausgehen können muss.

Das stimmt so nicht. Klar will man damit arbeiten und klar werden Sie per Buffer gelesen. Es ist dennoch gut wenn man "pro gelesenem Buffer" auf möglichst viele Zeichen zugreifen kann.

Bei intensivem Gebrauch kommt der Garbage Collector nicht mehr mit, da ist es schon wichtig wie viel Speicher pro gelesenem Buffer zugewiesen werden muss.

Dann ist die größe einer einzelnen Referenz doch egal, es kommt auf die Gesamtgröße an, inkl. Collection bzw. Array.
.

Hö? Die Gesamtgröße der Collection ist direkt abhängig von der Größe der Elemente, genau wie die Größe eines Array.
Dass pro "Wrapper-Typ" noch Speicher dazukommt ist schon klar, aber dieser Speicher fällt praktisch nicht ins Gewicht.
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Datentypen interner Speicherverbrauch x64 long vs. int Allgemeine Java-Themen 8
B speicherverbrauch 2dimensionales array - rätsel?! Allgemeine Java-Themen 13
M Analysieren von Speicherverbrauch Allgemeine Java-Themen 5
lacco Speicherverbrauch von Arrays Allgemeine Java-Themen 2
O Speicherverbrauch von Java / VM sehr hoch? Allgemeine Java-Themen 27
G Speicherverbrauch einer Variable Allgemeine Java-Themen 2
G Speicherverbrauch eines Programms Allgemeine Java-Themen 2
L Speicherverbrauch einer Anwendung unter Windows Allgemeine Java-Themen 2
J Speicherverbrauch des Systems ermitteln Allgemeine Java-Themen 4
J Maximalen Speicherverbrauch ermöglichen Allgemeine Java-Themen 2
C Speicherverbrauch von JDialog enorm Allgemeine Java-Themen 6
N Lwjgl 3d Objekt wird schmaler, wenn es sich dreht Allgemeine Java-Themen 0
B Ein Objekt einer Klasse mehreren anderen Klassen zur Verfügung stellen? Allgemeine Java-Themen 6
T Objekt Array Aufgabe mit Busdatenbank Allgemeine Java-Themen 2
Maxi-JOO Klassen Dummy Objekt in anderen Constructor übergeben Allgemeine Java-Themen 5
el_niiinho13 Objekt auf der Konsole ausgeben lassen Allgemeine Java-Themen 8
d.lumpi Aus Einer Klasse auf ein Objekt einer anderen Klasse Zugreifen Allgemeine Java-Themen 1
A Objekt aus anderen Objekten machen Allgemeine Java-Themen 8
SaftigMelo In einem Winkel Objekt bewegen Allgemeine Java-Themen 2
E Datentypen Wie kann ich die Längen der unterschiedlichen Ebenen aus einem Objekt lesen von dem ich weiß, dass es ein mehrdimensionaler Array ist? Allgemeine Java-Themen 3
H Objekt speichern und laden Allgemeine Java-Themen 1
H Objekt speichern und laden Allgemeine Java-Themen 1
J Objekt in Bytestream umwandeln Allgemeine Java-Themen 12
J Wie kann ich von Vornherrein einen Fokus auf ein Objekt entfernen? Allgemeine Java-Themen 3
J Information von getSource() Objekt auslesen Allgemeine Java-Themen 1
Drachenbauer Wie stelle ich fest, ob ein Objekt in meinem Array vorkommt? Allgemeine Java-Themen 5
S Variable als Objekt Name Allgemeine Java-Themen 3
D Input/Output Zwischen zwei ID-Räumen unterscheiden und Objekt löschen Allgemeine Java-Themen 16
L Objekt aus Objekt-array "löschen" Allgemeine Java-Themen 2
T Objekt mit String und Int aus TxT Datei erstellen Allgemeine Java-Themen 23
T Objekt in Array packen Allgemeine Java-Themen 6
K Methodenaufruf mit String / String zu Objekt konvertieren Allgemeine Java-Themen 8
S Neues Objekt darstellen Allgemeine Java-Themen 4
J Best Practice Objekt an alle Klassen verteilen ( Discord Bot ) Allgemeine Java-Themen 7
D Objekt-Suche mit mehreren optionalen Parametern Allgemeine Java-Themen 6
M Klassen Objekt weiter geben Allgemeine Java-Themen 1
B Klassen Objekt erzeugen und Konstruktor aufrufen - Welche Lösung ist besser? Allgemeine Java-Themen 2
L Variablen Eigenes Objekt wie z.B. einen Integer zuweisen Allgemeine Java-Themen 3
D Konstruktor - jedes Objekt einzeln erzeugen - alternative? Allgemeine Java-Themen 8
S Applet Überprüfen ob ein Objekt angeklickt wurde Allgemeine Java-Themen 2
RalleYTN 3D Objekt Translation basierend auf Rotation (Probleme mit Z Rotation) Allgemeine Java-Themen 0
B Von String zu <Objekt> ||Speichern/Laden Allgemeine Java-Themen 17
G Neues Objekt aus List<JsonObject> mit Stream Allgemeine Java-Themen 4
P Threads Objekt im Konstruktor anders wie im Run()-Block Allgemeine Java-Themen 10
R Objekt funktioniert nicht auf iOS Allgemeine Java-Themen 15
K Textdatei als Objekt Allgemeine Java-Themen 4
Viktim Classenname zu Objekt Allgemeine Java-Themen 4
P Entity Objekt Methoden vs Service methoden Allgemeine Java-Themen 2
D Datentypen Klassenattribut aus Objekt in generischer Liste Allgemeine Java-Themen 15
O Klassen Bruch im gleichen Objekt Speichern Allgemeine Java-Themen 1
P Liste zu Objekt umwandeln Allgemeine Java-Themen 4
C Liste checken auf MINDESTENS ein Objekt | Bukkit Allgemeine Java-Themen 3
K Best Practice JFrame Objekt allgemein zugänglich machen Allgemeine Java-Themen 8
B ArrayList in ein Objekt legen Allgemeine Java-Themen 1
D Objekt entlang eines Funktionsgraphens bewegen Allgemeine Java-Themen 6
M Objekt serialisieren/deserialisieren und in einer SQLite-Datenbank speichern Allgemeine Java-Themen 3
D Java Objekt als Service in Runtime registrieren Allgemeine Java-Themen 1
S Interaktion mit einer website (website als Objekt?) Allgemeine Java-Themen 3
J OOP Überwachen, ob ein Objekt erzeugt wird Allgemeine Java-Themen 9
S Byte Array welches in Laufzeit aufgelöst wird // Objekt Array Allgemeine Java-Themen 3
Thallius Hash über serialisiertes Objekt? Allgemeine Java-Themen 3
Developer_X Input/Output Serialisiertes Objekt speichern und laden Allgemeine Java-Themen 1
C Generics Objekt in ArrayList Allgemeine Java-Themen 2
L Klassen Konstruktor soll Objekt anderer Klasse erzeugen Allgemeine Java-Themen 2
F Neues Objekt aus .CSV definition Allgemeine Java-Themen 3
K Methoden Objekt wird nicht erkannt Allgemeine Java-Themen 11
P Objekt mit verschiedenen Datentypen Allgemeine Java-Themen 5
T Objekt kontaktiert seinen "erzeuger" Allgemeine Java-Themen 5
S Objekt orientierte Programmierung Allgemeine Java-Themen 7
C Objekt Datenverlust nach Methodenaufruf Allgemeine Java-Themen 9
H JavaFX Von einer Methode auf stage-Objekt zugreifen Allgemeine Java-Themen 3
T WeakReference/PhantomReference: Mitbekommen WELCHES Objekt nun GC'ed wird Allgemeine Java-Themen 2
T Class-Objekt mit URLClassloader Allgemeine Java-Themen 7
P Konsoleneingabe übernehmen und Objekt instanzieren. Allgemeine Java-Themen 5
E Auf Java-Objekt aus anderer Instanz zugreifen Allgemeine Java-Themen 26
L Klassen Polymorphie:2 Attribute gleichen Namens in einem Objekt Allgemeine Java-Themen 6
P Objekt Array in Datei Speichern Allgemeine Java-Themen 3
F Dynamisch ein Objekt einer bestimmten Subklasse erstellen Allgemeine Java-Themen 7
D Player Objekt - Frame über Server anzeigen lassen. Allgemeine Java-Themen 3
V Objekt löschen Allgemeine Java-Themen 7
A OOP Wie auf Objekt der Superklasse zugreifen? Allgemeine Java-Themen 6
S Datei in File-Objekt mit UTF-8 einlesen Allgemeine Java-Themen 2
M neues Objekt speichern, nicht Referenz Allgemeine Java-Themen 10
B synchronisierter zugriff auf Objekt Allgemeine Java-Themen 6
F Objekt einer Datei verschieben, aber Verzeichnispfad fehlt Allgemeine Java-Themen 6
C Objekt Typ herausfinden Allgemeine Java-Themen 5
E Objekt beim Erzeugen in ArrayList Allgemeine Java-Themen 9
M Objekt prüfen auf null ->Invocation Target Exception??? Allgemeine Java-Themen 2
M Objekt aus Liste in Liste suchen/löschen Allgemeine Java-Themen 6
D Eigenen Objekt Pool Allgemeine Java-Themen 15
C blueJ: Objekt wird nicht in Objektleiste angezeigt Allgemeine Java-Themen 8
T Objekt 2x deserialisieren, aber nur 1x im Heap haben? Allgemeine Java-Themen 4
sambalmueslie Benachrichtigung bei neuer Objekt-Instanz Allgemeine Java-Themen 5
U Konstante in Objekt definieren Allgemeine Java-Themen 6
D this mit Objekt überschreiben Allgemeine Java-Themen 17
R Synchronized - auf welchem Objekt Allgemeine Java-Themen 16
E Objekt erstellen Allgemeine Java-Themen 7
M Timer von nicht existiertem Objekt stopen Allgemeine Java-Themen 5
M Swing-Frontend abhängig von ausgewähltem Objekt Allgemeine Java-Themen 4
J Lebt das Objekt noch?? Allgemeine Java-Themen 12

Ähnliche Java Themen

Neue Themen


Oben