带缓存的区域偏移量计算



为什么ZoneOffset.ofTotalSeconds(int totalSeconds)仅在总秒数是一刻钟的倍数时才对ZoneOffset使用缓存?

if (totalSeconds % (15 * SECONDS_PER_MINUTE) == 0) {
Integer totalSecs = totalSeconds;
ZoneOffset result = SECONDS_CACHE.get(totalSecs);
if (result == null) {
(...)

到目前为止,目前使用的大多数区域偏移量是一刻钟的倍数,例如

Europe/Ljubljana     +02:00
America/Boa_Vista    -04:00
Asia/Brunei          +08:00
Pacific/Wake         +12:00
Asia/Colombo         +05:30
Asia/Kathmandu       +05:45

由于经常使用它们,因此值得缓存它们。如果在程序中使用,它们不太可能在您的程序或在同一 JVM 中运行的其他程序中再次使用。其他偏移量在历史上已经使用或从未使用过,因此不值得缓存。即使您使用一次,他们也认为您再次使用相同的概率足够低,以至于他们不想在 JVM 关闭之前缓存它(可能是从现在起的几周甚至几个月内(。

我并不是声称自己是读心者,但我给出的解释对我自己来说是有意义的,我认为如果不是100%正确,它抓住了所做决定背后的最重要的想法。事情稍微复杂一些。例如,没有那么多不能被整除的偏移量正在使用,但他们选择了一个简单的条件。

最新更新