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

  1. Primitive byte: kendisi 1 byte yer kaplar.
  2. Sarmalayıcı nesne Byte: LinkedList'de nesneler saklanır, primitive değil. byte, otomatik olarak bir Byte nesnesine paketlenir. Byte nesnesi şunları içerir:
    • Nesne meta verileri (başlık): genellikle 8 veya 12 byte (JVM'ye bağlıdır).
    • value alanı: 1 byte (byte tü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.
  3. LinkedList.Node düğümü: LinkedList'deki her öğe, iç sınıf Node örneğine sarılır. Bu düğüm şunları içerir:
    • Nesne meta verileri (başlık): 8 veya 12 byte.
    • item alanı: saklanan nesneye referans (Byte nesnesi). Referans genellikle 4 veya 8 byte (32 veya 64 bit JVM ve sıkıştırılmış işaretçiler kullanımıyla).
    • next alanı: bir sonraki düğmeye referans. 4 veya 8 byte.
    • prev alanı: ö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):

  • Byte nesnesi: 12 byte (başlık) + 1 byte (değer) + 3 byte (hizalama) = yaklaşık 16 byte.
  • Node: 12 byte (başlık) + 4 byte (item referansı) + 4 byte (next referansı) + 4 byte (prev referansı) + 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):

  • Byte nesnesi: 12 byte (başlık) + 1 byte (değer) + 3 byte (hizalama) = yaklaşık 16 byte.
  • Node: 12 byte (başlık) + 4 byte (item referansı) + 4 byte (next referansı) + 4 byte (prev referansı) + 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):

  • Byte nesnesi: 12 byte (başlık) + 1 byte (değer) + 3 byte (hizalama) = yaklaşık 16 byte.
  • Node: 12 byte (başlık) + 8 byte (item referansı) + 8 byte (next referansı) + 8 byte (prev referansı) + 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.