Ich frage mich nur, warum zwischen -128 und 127?
Ein größerer Bereich von Ganzzahlen kann zwischengespeichert werden, aber mindestens diejenigen zwischen -128 und 127 müssen zwischengespeichert werden, da dies in der Java-Sprachspezifikation (Schwerpunkt Mine) vorgeschrieben ist:
Wenn der Wert p, der eingerahmt wird, wahr, falsch, ein Byte oder ein Zeichen im Bereich von \ u0000 bis \ u007f oder eine int oder kurze Zahl zwischen -128 und 127 (einschließlich) ist , dann seien r1 und r2 die Ergebnisse von zwei beliebige Boxumwandlungen von p. Es ist immer so, dass r1 == r2.
Die Gründe für diese Anforderung werden im selben Absatz erläutert:
Idealerweise würde das Boxen eines gegebenen Grundwerts p immer eine identische Referenz ergeben . In der Praxis ist dies mit vorhandenen Implementierungstechniken möglicherweise nicht möglich. Die obigen Regeln sind ein pragmatischer Kompromiss. Die letzte Klausel oben verlangt, dass bestimmte gemeinsame Werte immer in nicht unterscheidbare Objekte gepackt werden. [...]
Dies stellt sicher, dass in den meisten Fällen das Verhalten das gewünschte ist, ohne dass eine übermäßige Leistungseinbuße entsteht, insbesondere bei kleinen Geräten . Weniger speicherbeschränkte Implementierungen können beispielsweise alle Zeichen- und Kurzwerte sowie int- und long-Werte im Bereich von -32 KB bis + 32 KB zwischenspeichern.
Wie kann ich andere Werte außerhalb dieses Bereichs zwischenspeichern?
Sie können die -XX:AutoBoxCacheMaxJVM-Option verwenden, die in der Liste der verfügbaren Hotspot-JVM-Optionen nicht wirklich dokumentiert ist . Es wird jedoch in den Kommentaren innerhalb der IntegerKlasse um Zeile 590 erwähnt :
Die Größe des Caches kann durch die -XX:AutoBoxCacheMax=<size>Option gesteuert werden .
Beachten Sie, dass dies implementierungsspezifisch ist und möglicherweise auf anderen JVMs verfügbar ist oder nicht.