Middle+
Wie hoch ist die geschätzte Menge an Speicher, die benötigt wird, um ein Primitive vom Typ Byte in einer LinkedList-Datenstruktur zu speichern?
sobes.tech KI
Antwort von AI
Speicherbewertung für die Speicherung eines primitiven byte in LinkedList<Byte>:
- Primitive
byte: benötigt 1 Byte für sich selbst. - Wrapper-Objekt
Byte: inLinkedListwerden Objekte gespeichert, keine Primitives.bytewird automatisch in einByte-Objekt verpackt. DasByte-Objekt enthält:- Objektdaten (Header): normalerweise 8 oder 12 Bytes (abhängig von der JVM).
- Feld
value: 1 Byte (für den Wert desbyte). - Ausrichtung: Objekte werden oft auf die Wortgröße der Maschine ausgerichtet (4 oder 8 Bytes). Wenn der Header 12 Bytes + Wert 1 Byte = 13 Bytes sind, wird wahrscheinlich auf 16 Bytes ausgerichtet.
- Knoten
LinkedList.Node: jedes Element inLinkedListist in eine Instanz der inneren KlasseNodeeingepackt. Dieser Knoten enthält:- Objektdaten (Header): 8 oder 12 Bytes.
- Feld
item: Referenz auf das gespeicherte Objekt (in diesem Fall einByte-Objekt). Die Referenz benötigt normalerweise 4 oder 8 Bytes (je nach JVM 32- oder 64-Bit und Verwendung von komprimierten Zeigern). - Feld
next: Referenz auf den nächsten Knoten. 4 oder 8 Bytes. - Feld
prev: Referenz auf den vorherigen Knoten. 4 oder 8 Bytes. - Ausrichtung: die Gesamtlänge der Felder und des Headers des Knotens wird ebenfalls ausgerichtet.
Minimale Schätzung (32-Bit-JVM ohne komprimierte Zeiger):
Byte-Objekt: 12 Bytes (Header) + 1 Byte (Wert) + 3 Bytes (Ausrichtung) = ca. 16 Bytes.Node: 12 Bytes (Header) + 4 Bytes (Referenzitem) + 4 Bytes (Referenznext) + 4 Bytes (Referenzprev) + 4 Bytes (Ausrichtung) = ca. 28 Bytes.- Gesamte Größe: ca. 16 (Byte) + ca. 28 (Node) = ca. 44 Bytes.
Typische Schätzung (64-Bit-JVM mit komprimierten Zeigern - standardmäßig für Heap < 32GB):
Byte-Objekt: 12 Bytes (Header) + 1 Byte (Wert) + 3 Bytes (Ausrichtung) = ca. 16 Bytes.Node: 12 Bytes (Header) + 4 Bytes (Referenzitem) + 4 Bytes (Referenznext) + 4 Bytes (Referenzprev) + 0 Bytes (Ausrichtung, wenn die Felder bereits auf 8 Bytes ausgerichtet sind) = ca. 24 Bytes.- Gesamte Größe: ca. 16 (Byte) + ca. 24 (Node) = ca. 40 Bytes.
Maximale Schätzung (64-Bit-JVM ohne komprimierte Zeiger):
Byte-Objekt: 12 Bytes (Header) + 1 Byte (Wert) + 3 Bytes (Ausrichtung) = ca. 16 Bytes.Node: 12 Bytes (Header) + 8 Bytes (Referenzitem) + 8 Bytes (Referenznext) + 8 Bytes (Referenzprev) + 4 Bytes (Ausrichtung) = ca. 40 Bytes (oder 36+4).- Gesamte Größe: ca. 16 (Byte) + ca. 40 (Node) = ca. 56 Bytes.
Daher beträgt die Speicherabschätzung für die Speicherung eines byte-Primitives in LinkedList<Byte> ungefähr 40-60 Bytes aufgrund der Overheads für das Byte-Wrapper-Objekt und den LinkedList.Node. Das ist deutlich mehr als 1 Byte des Primitives selbst.