Sobes.tech
Middle+

Kui suur on hinnanguline mälu kogus, mis on vajalik ühe byte-tüüpi primitiivi salvestamiseks LinkedList andmestruktuuris?

sobes.tech AI

Vastus AI-lt

Hinnang mälu kasutamisele ühe byte primitiivi salvestamiseks LinkedList<Byte>:

  1. Primitiv byte: võtab 1 bait.
  2. Objektiümbris Byte: LinkedList hoiab objekte, mitte primitiive. byte automaatselt pakitakse Byte objekti. Byte objekt sisaldab:
    • Objekti metadatas (pealkiri): tavaliselt 8 või 12 baitti (olenevalt JVM-ist).
    • Väli value: 1 bait (byte tüüpi väärtus).
    • Joondus: Objekte sageli joondatakse masina sõna suurusele (4 või 8 baitti). Kui pealkiri on 12 baitti ja väärtus 1 bait, kokku 13 baitti, tõenäoliselt joondatakse 16 baitti peale.
  3. LinkedList.Node sõlm: Iga element LinkedList-is on peidetud sisemisse klassi Node. See sõlm sisaldab:
    • Objekti metadatas (pealkiri): 8 või 12 baitti.
    • Väli item: viide hoitavale objekti (antud juhul Byte). Viide tavaliselt võtab 4 või 8 baitti (sõltuvalt 32- või 64-bit JVM-ist ja kasutatavatest tihendatud viidetest).
    • Väli next: viide järgmisele sõlmele. 4 või 8 baitti.
    • Väli prev: viide eelnevale sõlmele. 4 või 8 baitti.
    • Joondus: Sõlme väljad ja pealkiri joondatakse samuti.

Minimaalne hinnang (JVM 32-bit ilma tihendatud viideteta):

  • Byte objekti suurus: 12 baitti (pealkiri) + 1 bait (value) + 3 bait (joondus) = umbes 16 baitti.
  • Node sõlme suurus: 12 baitti (pealkiri) + 4 bait (item viide) + 4 bait (next viide) + 4 bait (prev viide) + 4 bait (joondus) = umbes 28 baitti.
  • Kokku: umbes 44 baitti.

Tüüpiline hinnang (64-bit JVM tihendatud viidetega - vaikimisi väiksem kui 32GB mälu):

  • Byte objekti suurus: 12 baitti (pealkiri) + 1 bait (value) + 3 bait (joondus) = umbes 16 baitti.
  • Node sõlme suurus: 12 baitti (pealkiri) + 4 bait (item viide) + 4 bait (next viide) + 4 bait (prev viide) + 0 baiti (joondus, kui väljad on juba joondatud 8 baiti peale) = umbes 24 baitti.
  • Kokku: umbes 40 baitti.

Maksimaalne hinnang (64-bit JVM ilma tihendatud viideteta):

  • Byte objekti suurus: 12 baitti (pealkiri) + 1 bait (value) + 3 bait (joondus) = umbes 16 baitti.
  • Node sõlme suurus: 12 baitti (pealkiri) + 8 baiti (item viide) + 8 baiti (next viide) + 8 baiti (prev viide) + 4 baiti (joondus) = umbes 40 baitti.
  • Kokku: umbes 56 baitti.

Seega, mälu hinnang ühe byte primitiivi salvestamiseks LinkedList<Byte>-s on umbes 40-60 baiti, arvestades objekti Byte ja LinkedList.Node lisakulusid. See on märkimisväärselt rohkem kui 1 bait byte primitiivi kohta.