Расчет ZoneOffset с кешем - PullRequest
       44

Расчет ZoneOffset с кешем

0 голосов
/ 05 октября 2019

Почему ZoneOffset.ofTotalSeconds(int totalSeconds) использует кэш для ZoneOffset только тогда, когда totalSeconds кратно четверти часа?

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

1 Ответ

0 голосов
/ 05 октября 2019

На сегодняшний день большинство смещений зон, используемых сегодня, кратны четверти часа, например

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% правильно, оно улавливает самые важные мысли, которые стояли за принятым решением. Все немного сложнее. Например, не так много смещений, не делимых на целый час, но они выбрали простое условие.

...