Warum erlaubt die JVM das Festlegen des "hohen" Werts für den IntegerCache, aber nicht des "niedrigen"?

Wir alle wissen, dass Java einen Cache für @ haInteger (und einige andere Typen) für eine Zahl im Bereich[-128, 127], die als "häufig verwendet" gelten.

Der Cache ist wie folgt aufgebaut:

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

Ich weiß, dass ich das @ verlängern kahigh value durch Übergabe eines Parameters an die JVM:

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

Was ich nicht verstehe, ist, warum wir das @ nicht überschreiben dürflow Wert

Bitte beachten Sie, dass ich nicht versucht habe, eine Problemumgehung zu finden, sondern dass ich verstehe, warum dies aus unbekannten Gründen nicht zulässig ist.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage