【发布时间】:2014-05-05 19:06:21
【问题描述】:
java.lang.Integer 有一个内部缓存 (IntegerCache),可以优化对 -128 到 127 之间数字的访问。问题是为什么只在这些数字之间?为什么不是 -256 到 255?
【问题讨论】:
-
为什么你认为你的范围更好?
-
如果他们选择了这些数字,你会问为什么不选择 -512 到 511。他们不得不做出很好的妥协,然后选择了这些数字。
-
并非如此。与哈希码 (31) 不同,-128 到 127 是完全任意的。是否有任何证据(数学)表明 -128 到 127 更好?他们还说是不是那么遵守JLS。但问题仍然是为什么这个特定范围。另外,如果范围如此重要,那为什么要修改它呢?
-
@AlexandreSantos 范围不很重要 - 选择它作为内存使用方面的合理折衷。理想的情况是缓存所有整数,但如果这样做,您将提出非常严格的堆大小要求。所以你需要在某个地方设置一个限制......它可能会有所不同,在某些 JDK 实现中可能会有所不同,如果你愿意,你可以以不同的方式定义它。
-
IMO 最好为一定数量的
Integers 提供缓存,以避免创建这些不可变对象的新实例。另一方面,如果您想要/需要更多Integers 被缓存,您可以编写自己的缓存,或者更好的是,将其用于 JVM 并为其使用配置。
标签: java