1

整数は、128 (デフォルト) 未満の値ではインターンのように動作し、それ以上の値では動作しないことを知っています。これは何度も回答されているのは知っていますが、理由を聞かれているところに気がつきませんでした。

だから私が知りたいのは、整数が128(デフォルト)未満の値に対してのみインターンとして機能し、それ以上の値に対しては機能しないのはなぜですか?少ないメモリ使用量/高いパフォーマンスをどのように改善しますか?

4

2 に答える 2

5

技術的には、クラスがロードされるときに値が事前にキャッシュされます。作成した値が返される String.intern() とは異なります。

また、最大値は 127 ではない可能性があります。そのように設定するか、次のようなオプションを使用すると、より高くなる可能性があります。-XX:+AggressiveOpts

デフォルトの範囲は、バイトと一致するように選択される可能性があります。注: キャッシュされた値は

Boolean: both values
Byte: all
Character: 0 to 127
Short: -128 to 127
Integer: -128 to 127
Long: -128 to 127
Float and Double: none
BigInteger: -16 to 16 (in HotSpot Java 7)
BigDecimal: 0 to 10 (if you use valueOf(long)) and 
            0 to 0.000000000000000 (if you use valueOf(long, int)) (in HotSpot Java 7)

これが行われる理由は、パフォーマンスを向上させ、GC 圧力を下げるためです。

ガベージを作成すると、キャッシュがガベージでいっぱいになり、すべてのコードが遅くなる可能性があります。また、オブジェクトを作成してクリーンアップする作業も必要になります。行う作業が少ないほど、プログラムはより速く一貫性が保たれます。

これは、それがもたらす違いの良い記事ですhttp://www.javaspecialists.eu/archive/Issue191.html

于 2013-07-17T08:35:20.747 に答える