Sobes.tech
Middle+

LinkedList ma'lumotlar tuzilmada byte turidagi primitive saqlash uchun kerak bo'ladigan xotira miqdorining taxminiy qiymati nima?

sobes.tech AI

AIdan javob

Xotira uchun LinkedList<Byte> ichida bitta byte primitivi saqlash uchun:

  1. Primitive byte: o'zi 1 baytni egallaydi.
  2. Wrapper obyekti Byte: LinkedListda obyektlar saqlanadi, primitively emas. byte avtomatik ravishda Byte obyekti ichiga paketlanadi. Byte obyekti quyidagilarni o'z ichiga oladi:
    • Ob'ekt metadatalari (sarlavha): odatda 8 yoki 12 bayt (JVMga bog'liq).
    • value maydoni: 1 bayt (byte turidagi qiymat uchun).
    • Yig'ish: obyektlar ko'pincha mashina so'zining o'lchamiga (4 yoki 8 bayt) mos ravishda yig'iladi. Agar sarlavha 12 bayt va qiymat 1 bayt bo'lsa, 13 bayt bo'lsa, ehtimol 16 baytga mos keladi.
  3. LinkedList.Node tugun: har bir element Node ichki sinfining nusxasida o'ralgan. Bu tugun quyidagilarni o'z ichiga oladi:
    • Ob'ekt metadatalari (sarlavha): 8 yoki 12 bayt.
    • item maydoni: saqlangan ob'ektga havola (Byte ob'ekti). Havola odatda 4 yoki 8 bayt (32 yoki 64 bit JVM va siqilgan ko'rsatkichlardan foydalanish bilan).
    • next maydoni: keyingi tugunga havola. 4 yoki 8 bayt.
    • prev maydoni: oldingi tugunga havola. 4 yoki 8 bayt.
    • Yig'ish: maydonlar va sarlavha maydonining umumiy o'lchami ham yig'iladi.

Minimal taxmin (32-bit JVM, siqilgan ko'rsatkichlar bo'lmagan holda):

  • Byte ob'ekti: 12 bayt (sarlavha) + 1 bayt (qiymat) + 3 bayt (yig'ish) = taxminan 16 bayt.
  • Node: 12 bayt (sarlavha) + 4 bayt (item havolasi) + 4 bayt (next havolasi) + 4 bayt (prev havolasi) + 4 bayt (yig'ish) = taxminan 28 bayt.
  • Umumiy o'lcham: taxminan 16 + 28 = taxminan 44 bayt.

Tavsiya qilinadigan taxmin (64-bit JVM, siqilgan ko'rsatkichlar bilan - odatda 32GB dan kichik xotira uchun):

  • Byte ob'ekti: 12 bayt (sarlavha) + 1 bayt (qiymat) + 3 bayt (yig'ish) = taxminan 16 bayt.
  • Node: 12 bayt (sarlavha) + 4 bayt (item havolasi) + 4 bayt (next havolasi) + 4 bayt (prev havolasi) + 0 bayt (yig'ish, agar maydonlar allaqachon 8 baytga mos keladigan tarzda yig'ilgan bo'lsa) = taxminan 24 bayt.

Maksimal taxmin (64-bit JVM, siqilgan ko'rsatkichlar bo'lmagan holda):

  • Byte ob'ekti: 12 bayt (sarlavha) + 1 bayt (qiymat) + 3 bayt (yig'ish) = taxminan 16 bayt.
  • Node: 12 bayt (sarlavha) + 8 bayt (item havolasi) + 8 bayt (next havolasi) + 8 bayt (prev havolasi) + 4 bayt (yig'ish) = taxminan 40 bayt (yoki 36+4).
  • Umumiy o'lcham: taxminan 16 + 40 = taxminan 56 bayt.

Shunday qilib, LinkedList<Byte> ichida bitta byte primitivi saqlash uchun taxminan 40-60 bayt xotira sarflanadi, bu Byte ob'ektining va LinkedList.Node tugunining qo'shimcha xarajatlari tufayli, primitive o'zidan juda ko'p.**