Wie groß ist der Integer-Cache?

KlasseInteger hat Cache, der dieInteger Werte. Also wenn ich Methode benutzevalueOf oder im Posteingang wird der neue Wert nicht instanziiert, sondern aus dem Cache geholt.

Ich weiß, dass die Standard-Cache-Größe ist127 Kann jedoch aufgrund der VM-Einstellungen erweitert werden. Meine Frage ist: Wie groß ist der Standardwert für die Cachegröße in diesen Einstellungen und kann ich diesen Wert ändern? Hängt dieser Wert davon ab, welche VM ich verwende (32 oder 64 Bit)?

Ich bin jetzt bei der Optimierung eines Legacy-Codes und werde wahrscheinlich die Konvertierung von int in Integer benötigen.

Erläuterung: Den folgenden Code habe ich in der Java-Quelle gefunden

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) {
            int i = parseInt(integerCacheHighPropValue);
            i = Math.max(i, 127);
            // Maximum array size is Integer.MAX_VALUE
            h = Math.min(i, Integer.MAX_VALUE - (-low));
        }
        high = h;

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

    private IntegerCache() {}
}

public static Integer valueOf(int i) {
    assert IntegerCache.high >= 127;
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}

Also ich denke der Cache ist konfigurierbar.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage