不思議に思うのですが、なぜ-128から127の間なのですか?
より広い範囲の整数をキャッシュできますが、Java言語仕様(強調鉱山)で義務付けられているため、少なくとも-128〜127の整数をキャッシュする必要があります。
ボックス化されている値pがtrue、false、バイト、または\ u0000〜 \ u007fの範囲のchar、または-128〜127 (両端を含む)のintまたはshortの数値の場合、r1とr2を次の結果とします。 pの任意の2つのボクシング変換。r1 == r2の場合は常にそうです。
この要件の理論的根拠は、同じ段落で説明されています。
理想的には、与えられたプリミティブ値pをボックス化すると、常に同一の参照が生成されます。実際には、これは既存の実装手法を使用して実行できない場合があります。上記のルールは実用的な妥協案です。上記の最後の節では、特定の共通値を常に区別できないオブジェクトにボックス化する必要があります。[...]
これにより、特に小さなデバイスで過度のパフォーマンスの低下を課すことなく、ほとんどの場合、動作が望ましいものになります。メモリ制限の少ない実装では、たとえば、すべてのchar値とshort値、および-32Kから+ 32Kの範囲のint値とlong値をキャッシュできます。
この範囲外の他の値をキャッシュするにはどうすればよいですか?
使用可能なホットスポットJVMオプションの-XX:AutoBoxCacheMax
リストには実際には記載されていないJVMオプションを使用できます。ただし、Integer
クラス内の590行目あたりのコメントに記載されています。
キャッシュのサイズは-XX:AutoBoxCacheMax=<size>
オプションで制御できます。
これは実装固有であり、他のJVMで使用できる場合とできない場合があることに注意してください。