Middle+
Wat is de schatting van de hoeveelheid geheugen die nodig is om een primitive van het type byte op te slaan in een LinkedList-gegevensstructuur?
sobes.tech AI
Antwoord van AI
Geheugeninschatting voor het opslaan van één primitief byte in LinkedList<Byte>:
- Primitief
byte: neemt 1 byte in beslag. - Wrapper-object
Byte: inLinkedListworden objecten opgeslagen, geen primitieve types.bytewordt automatisch verpakt in eenByte-object. HetByte-object bevat:- Metagegevens van het object (kop): meestal 8 of 12 bytes (afhankelijk van de JVM).
- Veld
value: 1 byte (voor de waarde van hetbyte-type). - Uitlijning: objecten worden vaak uitgelijnd op de grootte van een machinewoord (4 of 8 bytes). Als de kop 12 bytes + waarde 1 byte = 13 bytes is, wordt waarschijnlijk uitgelijnd op 16 bytes.
- Knoop
LinkedList.Node: elk element inLinkedListwordt ingepakt in een instantie van de interne klasseNode. Deze knoop bevat:- Metagegevens van het object (kop): 8 of 12 bytes.
- Veld
item: verwijzing naar het opgeslagen object (in dit geval eenByte-object). De verwijzing neemt meestal 4 of 8 bytes in beslag (afhankelijk van JVM 32- of 64-bit en gebruik van gecomprimeerde pointers). - Veld
next: verwijzing naar de volgende knoop. 4 of 8 bytes. - Veld
prev: verwijzing naar de vorige knoop. 4 of 8 bytes. - Uitlijning: de totale grootte van de velden en de kop van de knoop wordt ook uitgelijnd.
Minimale schatting (32-bit JVM zonder gecomprimeerde pointers):
Byte-object: 12 bytes (kop) + 1 byte (waarde) + 3 bytes (uitlijning) = ongeveer 16 bytes.Node: 12 bytes (kop) + 4 bytes (verwijzingitem) + 4 bytes (verwijzingnext) + 4 bytes (verwijzingprev) + 4 bytes (uitlijning) = ongeveer 28 bytes.- Totale grootte: ongeveer 16 + 28 = ongeveer 44 bytes.
Typische schatting (64-bit JVM met gecomprimeerde pointers - standaard voor heap < 32GB):
Byte-object: 12 bytes (kop) + 1 byte (waarde) + 3 bytes (uitlijning) = ongeveer 16 bytes.Node: 12 bytes (kop) + 4 bytes (verwijzingitem) + 4 bytes (verwijzingnext) + 4 bytes (verwijzingprev) + 0 bytes (uitlijning, als de velden al op 8 bytes zijn uitgelijnd) = ongeveer 24 bytes.- Totale grootte: ongeveer 16 + 24 = ongeveer 40 bytes.
Maximale schatting (64-bit JVM zonder gecomprimeerde pointers):
Byte-object: 12 bytes (kop) + 1 byte (waarde) + 3 bytes (uitlijning) = ongeveer 16 bytes.Node: 12 bytes (kop) + 8 bytes (verwijzingitem) + 8 bytes (verwijzingnext) + 8 bytes (verwijzingprev) + 4 bytes (uitlijning) = ongeveer 40 bytes (of 36+4).- Totale grootte: ongeveer 16 + 40 = ongeveer 56 bytes.
Dus, de geheugeninschatting voor het opslaan van één byte primitief in LinkedList<Byte> is ongeveer 40-60 bytes, vanwege de overhead van het Byte-wrapperobject en de LinkedList.Node-knoop. Dit is veel groter dan 1 byte van het primitief zelf.