gpt4 book ai didi

java - 为什么整数在 java 中仅对小于 128(默认值)的值充当实习生

转载 作者:行者123 更新时间:2023-11-29 07:07:52 25 4
gpt4 key购买 nike

我知道整数对于小于 128(默认值)的值就像实习生一样,对于大于 128 的值则不然。我知道这已多次作为答案给出,但我没有注意到询问原因的地方。

所以我想知道的是,为什么整数仅对小于 128(默认值)的值充当实习生,而不对大于 128 的值充当实习生?它如何提高更少的内存使用量/高性能?

最佳答案

从技术上讲,这些值是在加载类时预先缓存的。它不像 String.intern() 那样可以返回您创建的值。

此外,最大值可能不是 127,如果您这样设置或使用类似 -XX:+AggressiveOpts 的选项,它可能会更高

选择默认范围很可能只是为了与 Byte 保持一致。注意:缓存的值是

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

关于java - 为什么整数在 java 中仅对小于 128(默认值)的值充当实习生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17694823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com