Thomas Heigl created WICKET-7045: ------------------------------------ Summary: Avoid allocations in PageParameters.getNamedKeys Key: WICKET-7045 URL: https://issues.apache.org/jira/browse/WICKET-7045 Project: Wicket Issue Type: Improvement Components: wicket-core Affects Versions: 9.12.0 Reporter: Thomas Heigl Assignee: Thomas Heigl
PageParameters.getNamedKeys allocates a new TreeSet for every invocation: {code:java} public Set<String> getNamedKeys() { if ((namedParameters == null) || namedParameters.isEmpty()) { return Collections.emptySet(); } Set<String> set = new TreeSet<>(); for (NamedPair entry : namedParameters) { set.add(entry.getKey()); } return Collections.unmodifiableSet(set); } {code} Most of the calls to the method do not actually need the contents of the set. They either check if the set is empty, or check if it contains a given key. The empty checks can directly use the underlying list of named parameters, while the contains checks could use iteration since the number of page parameters is likely limited. The contains check is roughly 5-10 times faster for reasonably sized page parameters. The empty check is 50 times faster. {noformat} Benchmark Mode Cnt Score Error Units Benchmark.newHit thrpt 2 171106625,173 ops/s Benchmark.newMiss thrpt 2 139733394,987 ops/s Benchmark.newIsEmpty thrpt 2 1119518738,277 ops/s Benchmark.oldHit thrpt 2 25517811,801 ops/s Benchmark.oldMiss thrpt 2 25526261,487 ops/s Benchmark.oldIsEmpty thrpt 2 29757162,970 ops/s {noformat} -- This message was sent by Atlassian Jira (v8.20.10#820010)