【问题标题】:Reason for java.lang.Integer.IntegerCache between -128 and 127? [duplicate]java.lang.Integer.IntegerCache 在 -128 和 127 之间的原因? [复制]
【发布时间】: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


【解决方案1】:

适合一个字节。从 -256 到 255 是 512 个数字,需要 9 位。 -128到127,一个有符号字节的范围,占8位,一个字节的容量。

【讨论】:

  • 我不明白你说的 to fit in one byte 是什么意思。
  • IntegerCache 不使用字节来存储任何内容。它是可配置的,顺便说一句,并且可以容纳超过这个范围。
  • 为什么它必须适合一位?
【解决方案2】:

也许他们使用 1Byte int 来存储和索引缓存,而有符号的 1 Byte int 是从 -128 到 127。 -256 到 255 至少可以由 2 Byte int 处理,这可能太多了,因此会变慢。

【讨论】:

  • 不,它使用static final Integer[] cache;
猜你喜欢
  • 2015-03-11
  • 2018-06-09
  • 2012-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-23
  • 2021-10-27
  • 1970-01-01
相关资源
最近更新 更多