gpt4 book ai didi

java - 为什么 JVM 允许为 IntegerCache 设置 "high"值,但不允许设置 "low"?

转载 作者:IT老高 更新时间:2023-10-28 21:02:15 27 4
gpt4 key购买 nike

我们都知道,Java 对 [-128, 127] 范围内的数字(被认为是“常用”。

缓存设计如下:

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() {}
}

我知道我可以通过向 JVM 提供一个参数来扩展 high 值:

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

我不明白为什么我们不允许覆盖 low 值?

请注意,我并没有试图找到解决方法,而是理解为什么由于一些模糊的原因而不允许这样做。

最佳答案

发现已经有一个 Unresolved RFP关于这个。

Joe Darcy 对此问题发表了评论:

It is conceivable that it would be helpful to cache a greater range of negative number as well, but as of yet there has been no pressing need to do so.

请注意,如果有人在处理之前有兴趣使用它,RFP 提供的解决方法很差:

No workaround possible for increasing the size of the cache apart from Implementing your own cache and reffering to this first before going to the java.lang.Integer class. This is obviously not good as it requires calls to other classes rather than just the default use of the Integer.valueOf(int i) call.

关于java - 为什么 JVM 允许为 IntegerCache 设置 "high"值,但不允许设置 "low"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29633158/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com