-
Enhancement
-
Resolution: Fixed
-
P5
-
None
-
b08
In a few places in java.time code performs ConcurrentHashMap.putIfAbsent and then ConcurrentHashMap.get by the same key.
For example java.time.format.DateTimeTextProvider#findStore:
private Object findStore(TemporalField field, Locale locale) {
Entry<TemporalField, Locale> key = createEntry(field, locale);
Object store = CACHE.get(key);
if (store == null) {
store = createStore(field, locale);
CACHE.putIfAbsent(key, store);
store = CACHE.get(key);
}
return store;
}
Instead of separate dive into ConcurrentHashMap internal, we can just reuse result of putIfAbsent call.
Object prev = CACHE.putIfAbsent(key, store);
if (prev != null) {
store = prev;
}
For example java.time.format.DateTimeTextProvider#findStore:
private Object findStore(TemporalField field, Locale locale) {
Entry<TemporalField, Locale> key = createEntry(field, locale);
Object store = CACHE.get(key);
if (store == null) {
store = createStore(field, locale);
CACHE.putIfAbsent(key, store);
store = CACHE.get(key);
}
return store;
}
Instead of separate dive into ConcurrentHashMap internal, we can just reuse result of putIfAbsent call.
Object prev = CACHE.putIfAbsent(key, store);
if (prev != null) {
store = prev;
}
- relates to
-
JDK-8345668 ZoneOffset.ofTotalSeconds performance regression
-
- Resolved
-