Middle+
Kāda ir aptuvenā atmiņas daudzuma novērtējums, kas nepieciešams viena byte tipa primitīva glabāšanai LinkedList datu struktūrā?
sobes.tech AI
Atbilde no AI
Novērtējums atmiņai, lai saglabātu vienu byte primitivu LinkedList<Byte>:
- Primitīvs
byte: aizņem 1 baitu. - Objekta apvalks
Byte:LinkedListglabā objektus, ne primitivus.byteautomātiski tiek iepakotsByteobjektā.Byteobjekts satur:- Objekta metadatus (virsraksts): parasti 8 vai 12 baitus (atkarīgs no JVM).
- Lauks
value: 1 baitas (bytetipa vērtībai). - Izlīdzināšana: Objekti bieži tiek izlīdzināti līdz mašīnas vārda lielumam (4 vai 8 baiti). Ja virsraksts ir 12 baiti un vērtība 1 baitas, kopā 13 baiti, tas, visticamāk, tiks izlīdzināts līdz 16 baitiem.
LinkedList.Nodemezgls: Katrs elementsLinkedListir ietverts iekšējā klasēNode. Šis mezgls satur:- Objekta metadatus (virsraksts): 8 vai 12 baitus.
- Lauks
item: atsauce uz glabāto objektu (šajā gadījumā,Byteobjektu). Atsauce parasti aizņem 4 vai 8 baitus (atkarībā no 32 vai 64 bit JVM un izmantotajiem saspiestajiem norādītājiem). - Lauks
next: atsauce uz nākamo mezglu. 4 vai 8 baiti. - Lauks
prev: atsauce uz iepriekšējo mezglu. 4 vai 8 baiti. - Izlīdzināšana: Kopējais izmērs un mezgla virsraksts arī tiek izlīdzināts.
Minimālais novērtējums (JVM 32-bit bez saspiestajiem norādītājiem):
Byteobjekta izmērs: 12 baiti (virsraksts) + 1 baitas (vērtība) + 3 baiti (izlīdzināšana) = apmēram 16 baiti.Nodemezgla izmērs: 12 baiti (virsraksts) + 4 baiti (atsauceitem) + 4 baiti (atsaucenext) + 4 baiti (atsauceprev) + 4 baiti (izlīdzināšana) = apmēram 28 baiti.- Kopējais izmērs: apmēram 44 baiti.
Tipisks novērtējums (64-bit JVM ar saspiestajiem norādītājiem - pēc noklusējuma mazākām nekā 32 GB atmiņām):
Byteobjekta izmērs: 12 baiti (virsraksts) + 1 baitas (vērtība) + 3 baiti (izlīdzināšana) = apmēram 16 baiti.Nodemezgla izmērs: 12 baiti (virsraksts) + 4 baiti (atsauceitem) + 4 baiti (atsaucenext) + 4 baiti (atsauceprev) + 0 baiti (izlīdzināšana, ja lauki jau ir izlīdzināti līdz 8 baitiem) = apmēram 24 baiti.- Kopējais izmērs: apmēram 40 baiti.
Maksimālais novērtējums (64-bit JVM bez saspiestajiem norādītājiem):
Byteobjekta izmērs: 12 baiti (virsraksts) + 1 baitas (vērtība) + 3 baiti (izlīdzināšana) = apmēram 16 baiti.Nodemezgla izmērs: 12 baiti (virsraksts) + 8 baiti (atsauceitem) + 8 baiti (atsaucenext) + 8 baiti (atsauceprev) + 4 baiti (izlīdzināšana) = apmēram 40 baiti.- Kopējais izmērs: apmēram 56 baiti.
Tādējādi, novērtējums atmiņai, lai saglabātu vienu byte primitivu LinkedList<Byte> ir aptuveni 40-60 baiti, ņemot vērā papildu izmaksas par Byte objekta apvalku un LinkedList.Node mezglu. Tas ir ievērojami vairāk nekā 1 baitas pats primitivs.