Sobes.tech
Middle+

LinkedList məlumat strukturasında byte tipi primitive saxlamaq üçün lazım olan yaddaş miqdarının təxmini nədir?

sobes.tech Süni İntellekt

AI-dan cavab

LinkedList<Byte> içində bir byte primitivinin yadda saxlanması üçün yaddaş qiymətləndirməsi:

  1. Primitiv byte: öz-özünə 1 bayt tutar.
  2. Qablaşdırıcı obyekt Byte: LinkedListdə obyektlər saxlanılır, primitivlər deyil. byte avtomatik olaraq Byte obyektinə paketlənəcək. Byte obyekti aşağıdakıları ehtiva edir:
    • Obyektin metadatası (başlıq): ümumiyyətlə 8 və ya 12 bayt (JVM-dən asılıdır).
    • value sahəsi: 1 bayt (byte tipli dəyər üçün).
    • Yerləşdirmə: obyektlər çox vaxt maşın sözünün ölçüsünə (4 və ya 8 bayt) uyğunlaşdırılır. Əgər başlıq 12 bayt və dəyər 1 bayt olsa, 13 bayt, ehtimal ki, 16 bayta uyğunlaşdırılacaq.
  3. LinkedList.Node düyünü: hər element Node daxili sinfinin nümunəsinə bükülür. Bu düyün aşağıdakıları ehtiva edir:
    • Obyektin metadatası (başlıq): 8 və ya 12 bayt.
    • item sahəsi: saxlanılan obyektə istinad (Byte obyekti). İstinad adətən 4 və ya 8 bayt tutar (32 və ya 64 bit JVM və sıxılmış göstəricilərdən istifadə etməklə).
    • next sahəsi: növbəti düyinə istinad. 4 və ya 8 bayt.
    • prev sahəsi: əvvəlki düyinə istinad. 4 və ya 8 bayt.
    • Yerləşdirmə: sahələrin və başlığın ümumi ölçüsü də uyğunlaşdırılır.

Minimal təxmin (32-bit JVM, sıxılmış göstəricilər olmadan):

  • Byte obyekti: 12 bayt (başlıq) + 1 bayt (dəyər) + 3 bayt (uyğunlaşdırma) = təxminən 16 bayt.
  • Node: 12 bayt (başlıq) + 4 bayt (item istinadı) + 4 bayt (next istinadı) + 4 bayt (prev istinadı) + 4 bayt (uyğunlaşdırma) = təxminən 28 bayt.
  • Ümumi ölçü: təxminən 16 + 28 = təxminən 44 bayt.

Tipik təxmin (64-bit JVM, sıxılmış göstəricilərlə - defolt olaraq yığın < 32GB):

  • Byte obyekti: 12 bayt (başlıq) + 1 bayt (dəyər) + 3 bayt (uyğunlaşdırma) = təxminən 16 bayt.
  • Node: 12 bayt (başlıq) + 4 bayt (item istinadı) + 4 bayt (next istinadı) + 4 bayt (prev istinadı) + 0 bayt (uyğunlaşdırma, əgər sahələr artıq 8 bayta uyğunlaşdırılıbsa) = təxminən 24 bayt.

Maksimal təxmin (64-bit JVM, sıxılmış göstəricilərlə olmadan):

  • Byte obyekti: 12 bayt (başlıq) + 1 bayt (dəyər) + 3 bayt (uyğunlaşdırma) = təxminən 16 bayt.
  • Node: 12 bayt (başlıq) + 8 bayt (item istinadı) + 8 bayt (next istinadı) + 8 bayt (prev istinadı) + 4 bayt (uyğunlaşdırma) = təxminən 40 bayt (və ya 36+4).
  • Ümumi ölçü: təxminən 16 + 40 = təxminən 56 bayt.

Beləliklə, LinkedList<Byte> içində bir byte primitivini saxlamaq üçün yaddaş təxminən 40-60 bayt təşkil edir, bu da Byte obyektinin və LinkedList.Node düyünün əlavə xərcləri səbəbindən primitivin özündən çoxdur.