首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么JVM允许为IntegerCache设置“高”值,而不是“低”值?

为什么JVM允许为IntegerCache设置“高”值,而不是“低”值?
EN

Stack Overflow用户
提问于 2015-04-15 00:55:59
回答 1查看 927关注 0票数 21

我们都知道,Java为[-128, 127]范围内被认为是“常用”的数字(以及其他一些类型)提供了一个Integer缓存。

缓存设计如下:

代码语言:javascript
运行
复制
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() {}
}

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

代码语言:javascript
运行
复制
java -Djava.lang.Integer.IntegerCache.high=xxxx Aclass.class

我不明白的是为什么不允许我们重写low的值?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-15 01:00:45

已发现此问题上已存在未解析的RFP

乔·达西对这个问题发表了评论:

可以想象,缓存更大范围的负数也是有帮助的,但到目前为止还没有迫切的需要这样做。

请注意,RFP提供了一个很差的解决方案,如果有人在处理之前对此感兴趣的话:

除了实现您自己的缓存并在进入java.lang.Integer类之前首先参考这一点之外,没有其他方法可以增加缓存的大小。这显然不好,因为它需要调用其他类,而不仅仅是缺省使用的Integer.valueOf(int )调用.

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29633158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档