Merak ediyorum, neden -128 ile 127 arasında?
Daha geniş bir tam sayı aralığı önbelleğe alınabilir , ancak en azından -128 ile 127 arasındakiler önbelleğe alınmalıdır çünkü Java Dil Spesifikasyonu tarafından zorunlu kılınmıştır (vurgu benim):
Kutulu p değeri true, false, bir bayt veya \ u0000 ila \ u007f aralığında bir karakter veya -128 ile 127 (dahil) arasında bir int veya kısa sayı ise , r1 ve r2'nin sonuçları olsun p'nin herhangi iki boks dönüşümü. Her zaman r1 == r2 durumudur.
Bu gerekliliğin gerekçesi aynı paragrafta açıklanmıştır:
İdeal olarak, belirli bir ilkel değeri kutulamak p, her zaman aynı referans verir . Uygulamada, mevcut uygulama tekniklerini kullanarak bu mümkün olmayabilir. Yukarıdaki kurallar pragmatik bir uzlaşmadır. Yukarıdaki son cümle, belirli ortak değerlerin her zaman ayırt edilemeyen nesneler halinde kutuya alınmasını gerektirir. [...]
Bu, en yaygın durumlarda, özellikle küçük cihazlarda aşırı bir performans cezası olmaksızın davranışın istenen davranış olmasını sağlar . Daha az bellek sınırlı uygulamalar, örneğin, tüm karakter ve kısa değerleri ve ayrıca -32K ila + 32K aralığındaki int ve long değerleri önbelleğe alabilir.
Bu aralığın dışındaki diğer değerleri nasıl önbelleğe alabilirim?
Mevcut Hotspot JVM Seçenekleri-XX:AutoBoxCacheMax
listesinde gerçekte belgelenmeyen JVM seçeneğini kullanabilirsiniz . Ancak sınıf içinde 590. satırdaki yorumlarda bahsediliyor :Integer
Önbelleğin boyutu -XX:AutoBoxCacheMax=<size>
seçenekle kontrol edilebilir .
Bunun uygulamaya özgü olduğunu ve diğer JVM'lerde mevcut olabileceğini veya olmayabileceğini unutmayın.