static { // high value may be configured by property // high 的默认值为127 int h = 127; // 从vm中拿到high的数值,这个数值可以通过vm参数配置 String integerCacheHighPropValue = sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high"); // 如果拿到了这个值,说明进行了vm配置 if (integerCacheHighPropValue != null) { try { // 把这个值转化为int类型 int i = parseInt(integerCacheHighPropValue); // 这个值得最小值要大于等于127 i = Math.max(i, 127); // Maximum array size is Integer.MAX_VALUE // 这个值得最大值是2147483518,也就是整个cache数组的长度为Integer的最大值 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数组的长度 cache = new Integer[(high - low) + 1]; int j = low; // 为这个cache填充值,这些都是Integer对象 for(int k = 0; k < cache.length; k++) cache[k] = new Integer(j++);
// range [-128, 127] must be interned (JLS7 5.1.7) // 断言这个值得最大值大于等于127 assert IntegerCache.high >= 127; } // 私有化构造方法,jvm级别单例 privateIntegerCache(){} }