RFR: 8348880: Replace ConcurrentMap with AtomicReferenceArray for ZoneOffset.MINUTES_15_CACHE
Chen Liang
liach at openjdk.org
Tue Jan 28 16:34:22 UTC 2025
On Tue, 28 Jan 2025 16:11:53 GMT, Shaojin Wen <swen at openjdk.org> wrote:
> ZoneOffset.MINUTES_15_CACHE uses AtomicReferenceArray to replace ConcurrentMap to avoid object allocation caused by boxing from int to Integer during access.
src/java.base/share/classes/java/time/ZoneOffset.java line 139:
> 137:
> 138: /** Cache of time-zone offset by offset in seconds. */
> 139: private static final int MINUTES_15_SECONDS = 15 * SECONDS_PER_MINUTE;
I think a name like `SECONDS_PER_15_MINUTES` or `SECONDS_PER_QUARTER` might be better.
src/java.base/share/classes/java/time/ZoneOffset.java line 429:
> 427: throw new DateTimeException("Zone offset not in valid range: -18:00 to +18:00");
> 428: }
> 429: int minutes15Rem = totalSeconds / MINUTES_15_SECONDS;
I suggest renaming `minutes15Rem` to `quarters`. "Rem" is wrong, as this result is a quotient instead of a remainder.
src/java.base/share/classes/java/time/ZoneOffset.java line 435:
> 433: if (result == null) {
> 434: result = new ZoneOffset(totalSeconds);
> 435: var existing = MINUTES_15_CACHE.getAndSet(cacheIndex, result);
Suggestion:
var existing = MINUTES_15_CACHE.compareAndExchange(cacheIndex, null, result);
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/23337#discussion_r1932485129
PR Review Comment: https://git.openjdk.org/jdk/pull/23337#discussion_r1932489786
PR Review Comment: https://git.openjdk.org/jdk/pull/23337#discussion_r1932482577
More information about the core-libs-dev
mailing list