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>:
- Primitiv
byte: võtab 1 bait. - Objektiümbris
Byte:LinkedListhoiab objekte, mitte primitiive.byteautomaatselt pakitakseByteobjekti.Byteobjekt sisaldab:- Objekti metadatas (pealkiri): tavaliselt 8 või 12 baitti (olenevalt JVM-ist).
- Väli
value: 1 bait (bytetüü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.
LinkedList.Nodesõlm: Iga elementLinkedList-is on peidetud sisemisse klassiNode. See sõlm sisaldab:- Objekti metadatas (pealkiri): 8 või 12 baitti.
- Väli
item: viide hoitavale objekti (antud juhulByte). 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):
Byteobjekti suurus: 12 baitti (pealkiri) + 1 bait (value) + 3 bait (joondus) = umbes 16 baitti.Nodesõlme suurus: 12 baitti (pealkiri) + 4 bait (itemviide) + 4 bait (nextviide) + 4 bait (prevviide) + 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):
Byteobjekti suurus: 12 baitti (pealkiri) + 1 bait (value) + 3 bait (joondus) = umbes 16 baitti.Nodesõlme suurus: 12 baitti (pealkiri) + 4 bait (itemviide) + 4 bait (nextviide) + 4 bait (prevviide) + 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):
Byteobjekti suurus: 12 baitti (pealkiri) + 1 bait (value) + 3 bait (joondus) = umbes 16 baitti.Nodesõlme suurus: 12 baitti (pealkiri) + 8 baiti (itemviide) + 8 baiti (nextviide) + 8 baiti (prevviide) + 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.