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

  • FOSDEM

    FOSDEM

    13 Ocak 2009
  • jkimisyellow

    jkimisyellow

    6 Mayıs 2009
  • SalGames2016

    SalGames2016

    17 Kasım 2012