Middle+
Jaké je odhadované množství paměti potřebné k uložení primitive typu byte v datové struktuře LinkedList?
sobes.tech AI
Odpověď od AI
Odhad paměti pro uložení jednoho primitivního byte v LinkedList<Byte>:
- Primitivní
byte: zabírá sám o sobě 1 byte. - Obalový objekt
Byte: vLinkedListjsou uloženy objekty, nikoliv primitivní typy.bytebude automaticky zabalen do objektuByte. ObjektByteobsahuje:- Metadata objektu (hlavička): obvykle 8 nebo 12 byte (závisí na JVM).
- Pole
value: 1 byte (pro hodnotu typubyte). - Zarovnání: objekty jsou často zarovnány na velikost strojového slova (4 nebo 8 byte). Pokud hlavička má 12 byte + hodnota 1 byte = 13 byte, pravděpodobně bude zarovnáno na 16 byte.
- Uzel
LinkedList.Node: každý prvek vLinkedListje zabalen do instance vnitřní třídyNode. Tento uzel obsahuje:- Metadata objektu (hlavička): 8 nebo 12 byte.
- Pole
item: odkaz na uložený objekt (v tomto případě objektByte). Odkaz obvykle zabírá 4 nebo 8 byte (v závislosti na JVM 32 nebo 64 bit a použití komprimovaných ukazatelů). - Pole
next: odkaz na následující uzel. 4 nebo 8 byte. - Pole
prev: odkaz na předchozí uzel. 4 nebo 8 byte. - Zarovnání: celková velikost polí a hlavičky uzlu je také zarovnána.
Minimální odhad (32bit JVM bez komprimovaných ukazatelů):
- Objekt
Byte: 12 byte (hlavička) + 1 byte (hodnota) + 3 byte (zarovnání) = přibližně 16 byte. - Uzel
Node: 12 byte (hlavička) + 4 byte (odkazitem) + 4 byte (odkaznext) + 4 byte (odkazprev) + 4 byte (zarovnání) = přibližně 28 byte. - Celková velikost: přibližně 16 + 28 = přibližně 44 byte.
Typický odhad (64bit JVM se zkrácenými ukazateli - výchozí pro haldu < 32GB):
- Objekt
Byte: 12 byte (hlavička) + 1 byte (hodnota) + 3 byte (zarovnání) = přibližně 16 byte. - Uzel
Node: 12 byte (hlavička) + 4 byte (odkazitem) + 4 byte (odkaznext) + 4 byte (odkazprev) + 0 byte (zarovnání, pokud jsou pole již zarovnána na 8 byte) = přibližně 24 byte. - Celková velikost: přibližně 16 + 24 = přibližně 40 byte.
Maximální odhad (64bit JVM bez zkrácených ukazatelů):
- Objekt
Byte: 12 byte (hlavička) + 1 byte (hodnota) + 3 byte (zarovnání) = přibližně 16 byte. - Uzel
Node: 12 byte (hlavička) + 8 byte (odkazitem) + 8 byte (odkaznext) + 8 byte (odkazprev) + 4 byte (zarovnání) = přibližně 40 byte (nebo 36+4). - Celková velikost: přibližně 16 + 40 = přibližně 56 byte.
Takže odhadovaná paměť pro uložení jednoho byte primitiva v LinkedList<Byte> je přibližně 40-60 byte, kvůli dodatečným nákladům na obalový objekt Byte a uzel LinkedList.Node. To je mnohem více než 1 byte samotného primitiva.