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

  1. Primitīvs byte: aizņem 1 baitu.
  2. Objekta apvalks Byte: LinkedList glabā objektus, ne primitivus. byte automātiski tiek iepakots Byte objektā. Byte objekts satur:
    • Objekta metadatus (virsraksts): parasti 8 vai 12 baitus (atkarīgs no JVM).
    • Lauks value: 1 baitas (byte tipa 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.
  3. LinkedList.Node mezgls: Katrs elements LinkedList ir 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ā, Byte objektu). 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):

  • Byte objekta izmērs: 12 baiti (virsraksts) + 1 baitas (vērtība) + 3 baiti (izlīdzināšana) = apmēram 16 baiti.
  • Node mezgla izmērs: 12 baiti (virsraksts) + 4 baiti (atsauce item) + 4 baiti (atsauce next) + 4 baiti (atsauce prev) + 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):

  • Byte objekta izmērs: 12 baiti (virsraksts) + 1 baitas (vērtība) + 3 baiti (izlīdzināšana) = apmēram 16 baiti.
  • Node mezgla izmērs: 12 baiti (virsraksts) + 4 baiti (atsauce item) + 4 baiti (atsauce next) + 4 baiti (atsauce prev) + 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):

  • Byte objekta izmērs: 12 baiti (virsraksts) + 1 baitas (vērtība) + 3 baiti (izlīdzināšana) = apmēram 16 baiti.
  • Node mezgla izmērs: 12 baiti (virsraksts) + 8 baiti (atsauce item) + 8 baiti (atsauce next) + 8 baiti (atsauce prev) + 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.