[解決済み] なぜ Integer クラスは -128 から 127 までの値をキャッシュするのですか?
疑問点
前回の質問について。
Integer.valueOf(String)を使った==比較で、127と128で結果が異なるのはなぜですか?
についてですが、私たちは次のことを知っています。
Integer
class
の間の値を保存するキャッシュがあることがわかります。
-128
.
ただ、不思議なのは、なぜ の間にあるのでしょうか? ?
Integer.valueOf()のドキュメント
は、それが
"
頻繁にリクエストされる値をキャッシュする
"。
. しかし
127
と
-128
が頻繁にリクエストされるのは本当?と思いきや
頻繁に要求される値
は非常に主観的です。
この背景には何か理由があるのでしょうか?
ドキュメントからも記載されています。
"
...そして、この範囲外の他の値をキャッシュすることがあります。
"
これはどのように実現できるのでしょうか?
どのように解決するのですか?
ちょっと不思議なのですが、なぜ -128 と 127 の間なのでしょうか?
より大きな整数の範囲 かもしれない はキャッシュされますが、少なくとも-128と127の間のものは は で義務づけられているため、キャッシュされなければなりません。 Java 言語仕様 で義務づけられているからです (強調)。
ボックス化される値pが、真、偽、バイト、または、Ⓐ~Ⓑの範囲内の文字、または 128から127までのintまたはshortの数値。 とすると、r1 と r2 は p の任意の2つのボクシング変換の結果であるとします。
この要求の根拠は同じ段落で説明されています。
理想的には、与えられたプリミティブ値pをボクシングすることで、常に同一の参照 . 実際には、これは既存の実装技術では実現不可能な場合があります。上記のルールは実用的な妥協点です。上記の最終節では、特定の共通値を常に区別できないオブジェクトにボックス化することを要求している。[...]
これにより、特に小さなデバイスで過度のパフォーマンスペナルティを課すことなく、ほとんどの一般的なケースで、望ましい動作になることが保証されます。 . メモリ制限の少ない実装では、たとえば、-32K から +32K までの範囲の int および long 値と同様に、すべての char および short 値をキャッシュすることができます。
この範囲外の値をキャッシュするにはどうすればよいですか。
を使用することができます。
127
のリストではあまり文書化されていない JVM オプションです。
利用可能なホットスポットのJVMオプション
. しかし
の中のコメントは
-XX:AutoBoxCacheMax
クラス内のコメントで言及されています。
:
キャッシュの大きさは
Integer
オプションで制御できます。
これは実装に依存し、他のJVMでは利用できないかもしれないことに注意してください。
関連
-
Springの設定でxsdファイルのバージョン番号を設定しない方が良い理由
-
BindException: アドレスはすでに使用中です:バインドエラー解決
-
SocketException java.netの4つの例外解決策。
-
配列定数は初期化子でのみ使用可能です。
-
アノテーション「@Retention」の役割
-
X11 DISPLAY変数が設定されていない」問題の解決方法
-
swagger2 モデルが表示されない モデルが見つからない @ApiModel アノテーションが表示されない問題
-
[解決済み] 整数の左側にゼロを埋め込むにはどうしたらいいですか?
-
[解決済み] Javaクラスにおけるcanonical name、simple name、class nameの違いは何ですか?
-
[解決済み] Javaで整数のラッパーを比較するとき、128==128は偽で、127==127は真なのはなぜですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Eclipseは、ポップアップA Java Exception has occurred.を実行し、エラーException in threadの解決策を報告します。
-
javaの非静的メソッドを静的に参照することができない
-
StringBuilderが投げるArrayIndexOutOfBoundsExceptionの探索
-
Jsoup-Crawlingの動作
-
アノテーション「@Retention」の役割
-
XXX型を囲むインスタンスがJavaでアクセスできない
-
Junitのユニットテストエラー
-
コンストラクタDate()が未定義である問題
-
春ブート複数のデータソースの管理(atomikos)同じサーバーホスト上の複数のプロジェクトを開始する複数のJava - jarのエラーソリューション
-
WeChat小プログラム Bluetooth通信 Bluetoothモジュールデモ