Middle+
Aká je odhadovaná veľkosť pamäte potrebná na uloženie primitive typu byte v dátovej štruktúre LinkedList?
sobes.tech AI
Odpoveď od AI
Odhad pamäte na uloženie jedného primitiv byte v LinkedList<Byte>:
- Primitívny
byte: Zaberá 1 bajt sám o sebe. - Objektová obálka
Byte: VLinkedListsa ukladajú objekty, nie primitivy.bytebude automaticky zabalený do objektuByte. ObjektByteobsahuje:- Metadata objektu (hlavička): Zvyčajne 8 alebo 12 bajtov (závisí od JVM).
- Pole
value: 1 bajt (pre hodnotu typubyte). - Zarovnanie: Objekty sa často zarovnávajú na veľkosť strojovej slová (4 alebo 8 bajtov). Ak je hlavička 12 bajtov + hodnota 1 bajt = 13 bajtov, pravdepodobne bude zarovnané na 16 bajtov.
- Uzol
LinkedList.Node: Každý prvok vLinkedListje obalený v vnútornom triedeNode. Tento uzol obsahuje:- Metadata objektu (hlavička): 8 alebo 12 bajtov.
- Pole
item: Referencia na uložený objekt (v tomto prípade, objektByte). Referencia zaberá zvyčajne 4 alebo 8 bajtov (závisí od 32- alebo 64-bitovej JVM a použitia komprimovaných ukazovateľov). - Pole
next: Referencia na ďalší uzol. 4 alebo 8 bajtov. - Pole
prev: Referencia na predchádzajúci uzol. 4 alebo 8 bajtov. - Zarovnanie: Celková veľkosť polí a hlavičky uzla sa tiež zarovnáva.
Minimálna odhad (JVM 32-bit bez komprimovaných ukazovateľov):
- Objekt
Byte: 12 bajtov (hlavička) + 1 bajt (hodnota) + 3 bajty (zarovnanie) = približne 16 bajtov. - Uzol
Node: 12 bajtov (hlavička) + 4 bajty (referenciaitem) + 4 bajty (referencianext) + 4 bajty (referenciaprev) + 4 bajty (zarovnanie) = približne 28 bajtov. - Celková veľkosť: približne 44 bajtov.
Typický odhad (64-bit JVM so zhutnenými ukazovateľmi - podľa predvoleného nastavenia pre haldu < 32GB):
- Objekt
Byte: 12 bajtov (hlavička) + 1 bajt (hodnota) + 3 bajty (zarovnanie) = približne 16 bajtov. - Uzol
Node: 12 bajtov (hlavička) + 4 bajty (referenciaitem) + 4 bajty (referencianext) + 4 bajty (referenciaprev) + 0 bajtov (zarovnanie, ak sú polia už zarovnané na 8 bajtov) = približne 24 bajtov. - Celková veľkosť: približne 40 bajtov.
Maximálny odhad (64-bit JVM bez zhutnených ukazovateľov):
- Objekt
Byte: 12 bajtov (hlavička) + 1 bajt (hodnota) + 3 bajty (zarovnanie) = približne 16 bajtov. - Uzol
Node: 12 bajtov (hlavička) + 8 bajtov (referenciaitem) + 8 bajtov (referencianext) + 8 bajtov (referenciaprev) + 4 bajty (zarovnanie) = približne 40 bajtov. - Celková veľkosť: približne 56 bajtov.
Takže odhad pamäte na uloženie jedného primitiv byte v LinkedList<Byte> je približne 40-60 bajtov kvôli režii objektného obalu Byte a uzla LinkedList.Node. Toto je výrazne viac ako 1 bajt samotného primitiva.