Middle+
LinkedList veri yapısında byte türünde bir primitive saklamak için gereken bellek miktarının tahmini nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
LinkedList<Byte> içinde tek bir byte primitive saklamak için bellek tahmini:
- Primitive
byte: kendisi 1 byte yer kaplar. - Sarmalayıcı nesne
Byte:LinkedList'de nesneler saklanır, primitive değil.byte, otomatik olarak birBytenesnesine paketlenir.Bytenesnesi şunları içerir:- Nesne meta verileri (başlık): genellikle 8 veya 12 byte (JVM'ye bağlıdır).
valuealanı: 1 byte (bytetürü değeri için).- Hizalama: nesneler genellikle makine kelimesi boyutuna (4 veya 8 byte) hizalanır. Başlık 12 byte + değer 1 byte = 13 byte ise, muhtemelen 16 byte hizalanır.
LinkedList.Nodedüğümü:LinkedList'deki her öğe, iç sınıfNodeörneğine sarılır. Bu düğüm şunları içerir:- Nesne meta verileri (başlık): 8 veya 12 byte.
itemalanı: saklanan nesneye referans (Bytenesnesi). Referans genellikle 4 veya 8 byte (32 veya 64 bit JVM ve sıkıştırılmış işaretçiler kullanımıyla).nextalanı: bir sonraki düğmeye referans. 4 veya 8 byte.prevalanı: önceki düğmeye referans. 4 veya 8 byte.- Hizalama: toplam alan ve başlık boyutları da hizalanır.
Minimum tahmin (32-bit JVM, sıkıştırılmış işaretçiler olmadan):
Bytenesnesi: 12 byte (başlık) + 1 byte (değer) + 3 byte (hizalama) = yaklaşık 16 byte.Node: 12 byte (başlık) + 4 byte (itemreferansı) + 4 byte (nextreferansı) + 4 byte (prevreferansı) + 4 byte (hizalama) = yaklaşık 28 byte.- Toplam boyut: yaklaşık 16 + 28 = yaklaşık 44 byte.
Tipik tahmin (64-bit JVM, sıkıştırılmış işaretçilerle - varsayılan olarak heap < 32GB):
Bytenesnesi: 12 byte (başlık) + 1 byte (değer) + 3 byte (hizalama) = yaklaşık 16 byte.Node: 12 byte (başlık) + 4 byte (itemreferansı) + 4 byte (nextreferansı) + 4 byte (prevreferansı) + 0 byte (hizalama, alanlar zaten 8 byte hizalanmışsa) = yaklaşık 24 byte.- Toplam boyut: yaklaşık 16 + 24 = yaklaşık 40 byte.
En yüksek tahmin (64-bit JVM, sıkıştırılmamış işaretçilerle):
Bytenesnesi: 12 byte (başlık) + 1 byte (değer) + 3 byte (hizalama) = yaklaşık 16 byte.Node: 12 byte (başlık) + 8 byte (itemreferansı) + 8 byte (nextreferansı) + 8 byte (prevreferansı) + 4 byte (hizalama) = yaklaşık 40 byte (veya 36+4).- Toplam boyut: yaklaşık 16 + 40 = yaklaşık 56 byte.
Bu nedenle, LinkedList<Byte> içinde tek bir byte primitive saklamak için bellek tahmini yaklaşık 40-60 byte'dır, bu da Byte sarmalayıcı nesne ve LinkedList.Node düğümünün ek maliyetleri nedeniyle primitive'in kendisinden çok daha fazladır.