带缓存的 ZoneOffset 计算
ZoneOffset calculation with cache
为什么 ZoneOffset.ofTotalSeconds(int totalSeconds)
仅在 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 关闭(这可能是在几周甚至几个月后)。
我并没有声称自己是一个头脑 reader,但是我给出的解释对我自己来说是有意义的,我想即使不是 100% 正确,它也抓住了最重要的想法一直支持所做的决定。事情稍微复杂一些。例如,没有那么多不能被整小时整除的偏移量在使用中,但他们选择了一个简单的条件。
为什么 ZoneOffset.ofTotalSeconds(int totalSeconds)
仅在 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 关闭(这可能是在几周甚至几个月后)。
我并没有声称自己是一个头脑 reader,但是我给出的解释对我自己来说是有意义的,我想即使不是 100% 正确,它也抓住了最重要的想法一直支持所做的决定。事情稍微复杂一些。例如,没有那么多不能被整小时整除的偏移量在使用中,但他们选择了一个简单的条件。