SORU
3 Ocak 2014, Cuma


Neden sınıf önbellekleme aralığında değerler 127 -128 Tamsayı?

Benim önceki Soru ile ilgili olarak, Confusion in method Integer.valueOf(String) , Integer class -128 127 arasındaki değerleri saklayan bir önbellek olduğunu biliyoruz.

Merak ettim sadece, neden-128 ile 127 arasında?

Integer.valueOf() documentation belirtti"önbellekleme sık değerlerini istedi". Ama -128 127 değerleri arasında sık sık gerçek olunur mu? Düşündümsık istenen değerlerçok subjektif.
Bunun arkasında herhangi bir olası nedeni var mı?

Belgelerine de şunları söyledi:"..ve bu aralığın dışında diğer değerler önbellek."
Bu nasıl sağlanabilir?

CEVAP
6 Ocak 2014, PAZARTESİ


Merak ettim sadece, neden -128 ile 127 arasında?

Tamsayı daha büyük bir aralıkolabilir-128 ile 127 arasında önbelleğe, ama en azından bu olabilirgerekirJava Language Specification (vurgu benim) tarafından zorunlu olduğundan önbelleğe:

Eğer kutulu olmak p değeri true ise false, byte, veya aralıktaki bir char u0000 \\u007f, ya da için-128 ve 127 (dahil) arasında int ya da kısa bir dizio zaman r1 ve r2 izin p her iki boks dönüşüm sonuçları. Her zaman r1 == r2 bu durumda.

Bu gereksinim için gerekçe aynı paragrafta açıklanmıştır:

İdeal olarak, verilen ilkel bir değeri boks p, her zaman aynı referans verir. Uygulamada, bu mümkün mevcut uygulama teknikleri kullanarak olmayabilir. Yukarıdaki kurallar pragmatik bir uzlaşma vardır. Son fıkra yukarıda bazı ortak değerlere her zaman ayırt edilemez nesneler haline kutulu olması gerekir. [...]

Bu, çoğu durumda, bu davranış, istenen kişi, aşırı bir performans ceza, özellikle küçük cihazlar üzerinde empoze olmadan olmasını sağlar. Daha az bellek sınırlı uygulamaları, örneğin, char ve kısa tüm değerler olarak 32 k 32 k aralığında int ve long değerlerini önbelleğe olabilir.


Nasıl bu aralığın dışında diğer değerleri önbelleğe alabilir miyim?

Gerçekten available Hotspot JVM Options listesinde belirtilmeyen olan -XX:AutoBoxCacheMax JVM seçeneğini kullanabilirsiniz. Ancak the comments inside the Integer class around line 590 söz edilir:

Önbellek boyutu -XX:AutoBoxCacheMax=<size> seçeneği tarafından kontrol edilebilir.

Bu uygulama özel ve veya diğer Jvm'ler üzerinde mevcut olmayabilir unutmayın.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ben Vivona

    Ben Vivona

    24 Ocak 2010
  • DrakeVEVO

    DrakeVEVO

    17 AĞUSTOS 2009
  • pilslajt

    pilslajt

    20 HAZİRAN 2008