On Thu, 7 Nov 2024 19:02:53 GMT, Sean Mullan <mul...@openjdk.org> wrote:
>> Artur Barashev has updated the pull request incrementally with one >> additional commit since the last revision: >> >> - Cache the patterns >> - Make matching case-sensitive >> - Update java.security documentation >> - Refactor the tests > > src/java.base/share/classes/sun/security/util/AbstractAlgorithmConstraints.java > line 126: > >> 124: } >> 125: >> 126: Pattern p = patternCache.get(pattern); > > I think you want to use `putIfAbsent` here, so the operation happens > atomically. Actually if we do `patternCache.putIfAbsent(pattern, Pattern.compile(pattern.replace("*", ".*")))` we'll be computing Pattern on every call regardless if it's already present in cache. Also `putIfAbsent` makes no guarantees of atomicity. Better candidate here seems to be `computeIfAbsent` method, but still it would not be as fast as the current solution because it would add an extra `get` call to the cache interaction. That's how exactly `computeIfAbsent` method works: ` * <pre> {@code * if (map.get(key) == null) { * V newValue = mappingFunction.apply(key); * if (newValue != null) * map.put(key, newValue); * } * }</pre> ` ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/21841#discussion_r1833308486