Skip to content

Commit 823269a

Browse files
committed
Try again to improve Evaluator.get performance
Benchmark results from two commits ago versus now: === DefaultStackEvaluator - lessThan(Variable, Variable) === BEFORE AFTER Type ns/op ops/sec ns/op ops/sec ------------------------------------------------------------------- Boolean 26.2 38,141,539 19.1 52,356,402 String 24.7 40,538,160 19.0 52,750,213 Integer 27.5 36,387,683 27.9 35,805,309 Long 31.8 31,436,308 33.4 29,953,972 Float 35.2 28,424,840 43.0 23,264,335 Double 36.6 27,305,005 45.3 22,061,985 BigInteger 48.0 20,831,668 55.2 18,115,197 BigDecimal 53.9 18,564,329 63.2 15,825,842 === DefaultTreeEvaluator - lessThan(Variable, Variable) === BEFORE AFTER Type ns/op ops/sec ns/op ops/sec ------------------------------------------------------------------- Boolean 41.6 24,057,350 32.9 30,367,349 String 35.7 28,028,466 27.2 36,753,540 Integer 45.4 22,031,440 37.9 26,411,280 Long 48.5 20,603,576 40.8 24,530,858 Float 52.8 18,935,419 45.6 21,953,894 Double 59.8 16,733,346 50.1 19,969,427 BigInteger 75.6 13,223,210 45.9 21,796,485 BigDecimal 66.4 15,051,269 51.4 19,472,756
1 parent d316f03 commit 823269a

1 file changed

Lines changed: 5 additions & 3 deletions

File tree

src/main/java/org/scijava/parsington/eval/AbstractEvaluator.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,13 @@ public void setStrict(final boolean strict) {
7373
this.strict = strict;
7474
}
7575

76+
/** Sentinel object to disambiguate between missing vars and null values. */
77+
private static final Object MISSING = new Object();
78+
7679
@Override
7780
public Object get(final String name) {
78-
final Object value = vars.get(name);
79-
// NB: Take care to handle null-valued variables correctly.
80-
if (value != null || vars.containsKey(name)) return value;
81+
final Object value = vars.getOrDefault(name, MISSING);
82+
if (value != MISSING) return value;
8183
if (strict) throw new IllegalArgumentException("Unknown variable: " + name);
8284
return new Unresolved(name);
8385
}

0 commit comments

Comments
 (0)