2015-04-14 10 views
17

Java'nın, "yaygın olarak kullanılan" kabul edilen [-128, 127] numaralı telefon numarasında Integer (ve diğer bazı türler) için bir önbelleği olduğunu biliyoruz.JVM neden IntegerCache için "yüksek" değeri ayarlamaya izin veriyor, ancak "düşük" değil?

önbellek aşağıdaki gibi tasarlanmıştır:

private static class IntegerCache { 
    static final int low = -128; 
    static final int high; 
    static final Integer cache[]; 

    static { 
     // high value may be configured by property 
     int h = 127; 
     String integerCacheHighPropValue = 
      sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high"); 
     if (integerCacheHighPropValue != null) { 
      try { 
       int i = parseInt(integerCacheHighPropValue); 
       i = Math.max(i, 127); 
       // Maximum array size is Integer.MAX_VALUE 
       h = Math.min(i, Integer.MAX_VALUE - (-low) -1); 
      } catch(NumberFormatException nfe) { 
       // If the property cannot be parsed into an int, ignore it. 
      } 
     } 
     high = h; 

     cache = new Integer[(high - low) + 1]; 
     int j = low; 
     for(int k = 0; k < cache.length; k++) 
      cache[k] = new Integer(j++); 

     // range [-128, 127] must be interned (JLS7 5.1.7) 
     assert IntegerCache.high >= 127; 
    } 

    private IntegerCache() {} 
} 

ben JVM bir parametre vererek high değerini uzatabilirsiniz biliyoruz: Anlamıyorum ne

java -Djava.lang.Integer.IntegerCache.high=xxxx Aclass.class 

yüzden low değerini geçersiz kılmaya izin vermiyor musunuz?

Bir geçici çözüm bulmaya çalışmadığımı, bunun yerine neden bazı nedenlerden dolayı neden izin verilmediğini anladığımı unutmayın.

cevap

10

Üzerinde zaten çözümlenmemiş bir RFP olduğunu öğrendik.

Joe Darcy konuyla ilgili şu yorumu yaptı:

O yanı negatif sayının daha geniş bir yelpazede önbelleğe yararlı olacağını düşünülebilir, fakat olmuştur henüz itibariyle acil bir ihtiyaç yapmak yani.

yok geçici çözüm mümkün kendi önbellek uygulanması dışında önbellek boyutu artırılması için: o ele alınır zamankinden birisi bu kullanmak ilginizi olsaydı RFP fakir geçici çözüm sunan

Not ve , buna java.lang.Integer sınıfına gitmeden önce bunu bildirir. Bu, Integer.valueOf (int i) numaralı çağrı için varsayılan olarak kullanmak yerine, diğer sınıflara çağrıları gerektirdiği için iyi değildir.

İlgili konular