Sobes.tech
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>:

  1. Primitivni byte: Zauzima 1 bajt samostalno.
  2. Objekat-omot Byte: U LinkedList se čuvaju objekti, a ne primitivni tipovi. byte će biti automatski upakovan u objekat Byte. Objekat Byte sadrži:
    • Metapodatke objekta (zaglavlje): Obično 8 ili 12 bajta (zavisno od JVM-a).
    • Polje value: 1 bajt (za vrednost tipa byte).
    • 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.
  3. Čvor LinkedList.Node: Svaki element u LinkedList je obavijen u unutrašnju klasu Node. Ovaj čvor sadrži:
    • Metapodatke objekta (zaglavlje): 8 ili 12 bajta.
    • Polje item: Referenca na čuvani objekat (u ovom slučaju, objekat Byte). 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 (referenca item) + 4 bajta (referenca next) + 4 bajta (referenca prev) + 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 (referenca item) + 4 bajta (referenca next) + 4 bajta (referenca prev) + 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 (referenca item) + 8 bajta (referenca next) + 8 bajta (referenca prev) + 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.