Middle+
Koliko je procenjeno da je memorije potrebno za čuvanje jednog primitiva tipa byte u strukturi podataka LinkedList?
sobes.tech АИ
Одговор од АИ
Procena memorije za skladištenje jednog primitiva byte u LinkedList<Byte>:
- Primitivni
byte: Zauzima 1 bajt samostalno. - Objekat-omot
Byte: ULinkedListse čuvaju objekti, a ne primitivni tipovi.byteće biti automatski upakovan u objekatByte. ObjekatBytesadrži:- Metapodatke objekta (zaglavlje): Obično 8 ili 12 bajta (zavisno od JVM-a).
- Polje
value: 1 bajt (za vrednost tipabyte). - Poravnanje: Objekti se često poravnavaju do veličine mašinske reči (4 ili 8 bajta). Ako je zaglavlje 12 bajta + vrednost 1 bajt = 13 bajta, verovatno će biti poravnato na 16 bajta.
- Čvor
LinkedList.Node: Svaki element uLinkedListje obavijen u unutrašnju klasuNode. Ovaj čvor sadrži:- Metapodatke objekta (zaglavlje): 8 ili 12 bajta.
- Polje
item: Referenca na čuvani objekat (u ovom slučaju, objekatByte). Referenca obično zauzima 4 ili 8 bajta (zavisno od 32- ili 64-bitnog JVM-a i korišćenja kompresovanih pokazivača). - Polje
next: Referenca na sledeći čvor. 4 ili 8 bajta. - Polje
prev: Referenca na prethodni čvor. 4 ili 8 bajta. - Poravnanje: Ukupna veličina polja i zaglavlja čvora se takođe poravnava.
Minimalna procena (JVM 32-bit bez kompresovanih pokazivača):
- Objekat
Byte: 12 bajta (zaglavlje) + 1 bajt (vrednost) + 3 bajta (poravnanje) = oko 16 bajta. - Čvor
Node: 12 bajta (zaglavlje) + 4 bajta (referencaitem) + 4 bajta (referencanext) + 4 bajta (referencaprev) + 4 bajta (poravnanje) = oko 28 bajta. - Ukupna veličina: oko 44 bajta.
Tipična procena (64-bit JVM sa kompresovanim pokazivačima - po default-u za heap < 32GB):
- Objekat
Byte: 12 bajta (zaglavlje) + 1 bajt (vrednost) + 3 bajta (poravnanje) = oko 16 bajta. - Čvor
Node: 12 bajta (zaglavlje) + 4 bajta (referencaitem) + 4 bajta (referencanext) + 4 bajta (referencaprev) + 0 bajta (poravnanje, ako su polja već poravnata na 8 bajta) = oko 24 bajta. - Ukupna veličina: oko 40 bajta.
Maksimalna procena (64-bit JVM bez kompresovanih pokazivača):
- Objekat
Byte: 12 bajta (zaglavlje) + 1 bajt (vrednost) + 3 bajta (poravnanje) = oko 16 bajta. - Čvor
Node: 12 bajta (zaglavlje) + 8 bajta (referencaitem) + 8 bajta (referencanext) + 8 bajta (referencaprev) + 4 bajta (poravnanje) = oko 40 bajta. - Ukupna veličina: oko 56 bajta.
Dakle, procena memorije za skladištenje jednog primitivnog byte u LinkedList<Byte> je približno 40-60 bajta zbog troškova objektnog omotača Byte i čvora LinkedList.Node. Ovo je znatno više od 1 bajta samog primitiva.