SORU
3 Kasım 2008, PAZARTESİ


Bellek Java'da bir nesnenin tüketimi nedir?

Bellek alanı 100 öznitelikleri olan bir nesne tarafından tüketilen bir öznitelik her 100 nesnelerin, aynı mı?

Ne kadar bellek bir nesne için tahsis edilir?< / ^ br . Ne kadar ek alan bir öznitelik eklerken kullanılır?

CEVAP
3 Kasım 2008, PAZARTESİ


JavaWorld göre

Düz Object 8 bayt alır;

''Cevabını veriyor. hayır yani

Not: buna ek Olarak, yapışkan notlar 1.5 [getObjectSize() method.*, 18*, ekledi

Mindprod 32 ve 64bits hariç OS arasında değişmez olan farklı boyutlarda, özetlernesneye başvuruyor. 64-bit JVM bazı 32-bit platformu üzerinde çalıştırmak yükünü önlemek amacıyla 21* *olabilir.

Bir JVM ilkel eğer resmi bir boyutu varmış gibi davranması gerekir ama verileri DAHİLİ olarak istediği herhangi bir şekilde, ya da küçük indian büyük mağaza ücretsiz, dolgu ya da üstten bir miktar.
Örneğin, JVM veya yerel derleyici BitSet gibi 64-bit uzun parçalar halinde boolean[] saklamak için karar verebilirsiniz. Program aynı cevapları verir gibi, bu kadar uzun anlatmak zorunda değildir.

  • Bazı geçici Nesneler yığını ayrılamıyor.
  • Bazı değişken veya yöntem çağrıları tamamen varlığını sabitleri ile değiştirilmesi ve optimize olabilir.
  • Bu yöntem veya döngüler sürüm olabilir, yani bir yöntem iki sürümü derleme, belirli bir durum için optimize edilmiş, aramak. ön karar her zaman

Tabii ki donanım ve işletim sistemi çok katmanlı önbelleğe chip-önbellek SRAM önbellek, DRAM önbellek, sıradan RAM çalışma kümesi ve diskte saklamak destek var. Veri önbelleği her düzeyde çoğaltılmış olabilir. Tüm bu karmaşıklık sadece çok kabaca RAM tüketimini tahmin etmek anlamına gelir.


JavaWorld article depolama yük konteyner kullanılan bağlı olarak hakkında biraz daha ayrıntı verir:

Örneğin, ambalaj kağıtları çok masraflı nitelikler: ilkel Türüne göre olabilir

Integer: 16 bayt sonucu bir int değeri sadece 4 ekstra bayt içine sığabilecek çünkü beklediğimden biraz daha kötü. Bir Tamsayı kullanarak bana 00'lük bir bellek yükü ilkel bir tür olarak değerini saklamak varken kıyasla pahalı

Long: 16 bayt da Açıkça yığın gerçek nesne boyutu düşük seviyeli bellek uyumu belirli bir İŞLEMCİ türü için özel JVM bir uygulama tarafından yapılan tabidir. Uzun bir Nesne yükü 8 bayt gibi görünüyor, 8 gerçek uzun değeri daha fazla bayt var. Buna karşılık, Tamsayı 4 bayt kullanılmayan bir delik, güçleri kullanıyorum JVM hizalama bir nesne, çünkü büyük olasılıkla 8 baytlık bir kelime sınırı vardı.

Diğer kaplar çok pahalı

Çok boyutlu dizilerbaşka bir sürpriz vardır.
Geliştiriciler genellikle sayısal ve bilimsel hesaplama int[dim1][dim2] gibi yapıları kullanır.
int[dim1][dim2] dizi örneği, int[dim2] Her iç içe geçmiş bir dizi Object kendi içinde bir haktır. Her zamanki 16 baytlık bir dizi yükü ekler. Üçgen veya düzensiz bir dizi ihtiyacım yok, o saf yükü temsil eder. Etkisi dizi boyutları büyük ölçüde farklı olduğunda büyür.
Örneğin, int[128][2] bir örneği 3 bin 600 bayt alır. int[256] bir örnek kullanır 1040 bayt göre aynı kapasiteye sahiptir), 3 bin 600 bayt 246 yüzde yükünü temsil eder. byte[256][1], aşırı durumda yük faktörü 19 oldu. Aynı sözdizimi herhangi bir depolama havai eklemez C/C durumu ile karşılaştırın.

String: String's hafıza büyüme iç char dizi büyüme izler. Ancak, String sınıf yük bir 24 bayt ekler.
Boyutu boş olmayan bir Dize için 10 karakter veya daha az, katma maliyeti yararlı yükü göreli olarak (her char için 2 bayt uzunluğu 4 bayt), 400 yüzde 100 arasında değişir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • David Wills

    David Wills

    31 Aralık 2007
  • FUNKER530 - Veteran Community & Combat Footage

    FUNKER530 -

    25 Ocak 2007
  • Julian Smith

    Julian Smith

    31 EKİM 2006

İLGİLİ SORU / CEVAPLAR