RFR: 8178889: Move creation of AbstractChronology comparators to call sites
Claes Redestad
claes.redestad at oracle.com
Tue Apr 18 12:28:27 UTC 2017
Hi,
in AbstractChronology we define a number of comparators which could be
moved to their
respective call site and thus be lazily initialized when needed with no
performance
penalty.
Bug: https://bugs.openjdk.java.net/browse/JDK-8178889
Webrev: http://cr.openjdk.java.net/~redestad/8178889/jdk.01/
Testing/analysis:
- naive micro to show this doesn't cause a regression in steady
state[1], for those in
doubt
- reduces executed bytecode by ~127K and drops 5 generated classes from
startup of
applications that depend on AbstractChronology but don't use any of
these comparators
- pass all java/time tests
Thanks!
/Claes
[1]
package org.openjdk;
import org.openjdk.jmh.annotations.Benchmark;
import java.time.chrono.*;
import java.lang.reflect.*;
public class ChronoComparatorBench {
public static Method timeLineOrder;
static {
try {
timeLineOrder =
ChronoLocalDate.class.getDeclaredMethod("timeLineOrder");
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Benchmark
public Object getComparator() throws Exception {
return timeLineOrder.invoke(null);
}
}
-f 1 -tu us -bm avgt
Benchmark Mode Cnt Score Error Units
ChronoComparatorBench.getComparator avgt 20 5.979 ± 0.067 ns/op #
before
ChronoComparatorBench.getComparator avgt 20 5.975 ± 0.054 ns/op # after
More information about the core-libs-dev
mailing list