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:
- Primitiv
byte: öz-özünə 1 bayt tutar. - Qablaşdırıcı obyekt
Byte:LinkedListdə obyektlər saxlanılır, primitivlər deyil.byteavtomatik olaraqByteobyektinə paketlənəcək.Byteobyekti 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).
valuesahəsi: 1 bayt (bytetipli 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.
LinkedList.Nodedüyünü: hər elementNodedaxili 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.
itemsahəsi: saxlanılan obyektə istinad (Byteobyekti). İ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ə).nextsahəsi: növbəti düyinə istinad. 4 və ya 8 bayt.prevsahə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):
Byteobyekti: 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 (itemistinadı) + 4 bayt (nextistinadı) + 4 bayt (previstinadı) + 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):
Byteobyekti: 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 (itemistinadı) + 4 bayt (nextistinadı) + 4 bayt (previstinadı) + 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):
Byteobyekti: 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 (itemistinadı) + 8 bayt (nextistinadı) + 8 bayt (previstinadı) + 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.