RFR: [6904367]: (coll) IdentityHashMap is resized before exceeding the expected maximum size (original) (raw)

Jeff Hain jeffhain at rocketmail.com
Wed Jul 16 20:31:25 UTC 2014


Hi, took me some time to setup Maven/JMH and learn the basics. (two tools in a day, phew, that's more than I usually do in a year! :)

JIT can sometimes optimize the code so aggressively

I was trying to bench this aggressively optimized version of the code, with the idea that:

But I agree I have no clue whether the optimization would be similar in another program.

I suggest you try to express your benchmark in a tried framework like JMH:

 http://openjdk.java.net/projects/code-tools/jmh/ In particular I suggest studying included samples. Regards, Peter

Below the JMH version of my neanderthalian bench :) followed by some results (with 1.7 bytecode, win7, core i7),

then a bench similar to the one you posted (http://mail.openjdk.java.net/pipermail/core-libs-dev/2014-July/027681.html), and results again.

@State(Scope.Thread) public class JmhIHMBench {

    private static final int MAX_NBR_OF_MAPPINGS = 1*1000;          final Map<Object, Object> map_original = new IdentityHashMap<Object, Object>();     // etc.     final Map<Object, Object> map_peter8noloop = new IdentityHashMapPeter8NoLoop<Object, Object>();

    Object[] keys;     int i;     private static Object[] newKeys(int size) {         final Object[] keys = new Object[size];         for (int i=0;i<keys.length;i++) {             keys[i] = new Object();         }         return keys;     }          @Setup(Level.Iteration)     public void prepare() {         keys = newKeys(MAX_NBR_OF_MAPPINGS);         i = 0;     }

    @Benchmark     public void bench_put_original(Blackhole bh) {         bench_put(bh, this.map_original);     }     // etc.     @Benchmark     public void bench_put_peter8noloop(Blackhole bh) {         bench_put(bh, this.map_peter8noloop);     }

    private void bench_put(Blackhole bh, Map<Object,Object> map) {         if (map.size() == MAX_NBR_OF_MAPPINGS) {             map.clear();             i = 0;         }         final Object kv = keys[i++];         bh.consume(map.put(kv, kv));     }          public static void main(String[] args) throws RunnerException {         Options opt = new OptionsBuilder()                 .include("." + JmhIHMBench.class.getSimpleName() + ".")                 .warmupIterations(8)                 .measurementIterations(10)                 .threads(1)                 .forks(1)                 .shouldDoGC(false)                 .build();         new Runner(opt).run();     } }     /*      * jdk7u51 (run 1): Benchmark                                Mode   Samples        Score  Score error    Units r.JmhIHMBench.bench_put_original        thrpt        10 84087111,944  6033159,942    ops/s r.JmhIHMBench.bench_put_peter7          thrpt        10 68893501,546  1375694,507    ops/s r.JmhIHMBench.bench_put_peter7noloop    thrpt        10 79900659,706  6637125,685    ops/s r.JmhIHMBench.bench_put_peter8          thrpt        10 79062559,130  1392057,456    ops/s r.JmhIHMBench.bench_put_peter8noloop    thrpt        10 89184331,506  2380981,771    ops/s      /     /      * jdk7u51 (run 2): Benchmark                                Mode   Samples        Score  Score error    Units r.JmhIHMBench.bench_put_original        thrpt        10 90430298,285  1749471,171    ops/s r.JmhIHMBench.bench_put_peter7          thrpt        10 77895700,268  1118205,815    ops/s r.JmhIHMBench.bench_put_peter7noloop    thrpt        10 87449460,422  2241899,330    ops/s r.JmhIHMBench.bench_put_peter8          thrpt        10 79993955,944  1799749,550    ops/s r.JmhIHMBench.bench_put_peter8noloop    thrpt        10 89818256,344   886977,083    ops/s      /     /      * jdk8u20 (run 1): Benchmark                                Mode   Samples        Score  Score error    Units r.JmhIHMBench.bench_put_original        thrpt        10 108675548,411  7130886,988    ops/s r.JmhIHMBench.bench_put_peter7          thrpt        10 94452557,383  4030609,636    ops/s r.JmhIHMBench.bench_put_peter7noloop    thrpt        10 99070373,936  2204912,685    ops/s r.JmhIHMBench.bench_put_peter8          thrpt        10 106865766,992  6248051,431    ops/s r.JmhIHMBench.bench_put_peter8noloop    thrpt        10 114880028,516  1176180,414    ops/s      /     /      * jdk8u20 (run 2): Benchmark                                Mode   Samples        Score  Score error    Units r.JmhIHMBench.bench_put_original        thrpt        10 117513077,228  2011080,121    ops/s r.JmhIHMBench.bench_put_peter7          thrpt        10 108988770,194  1468043,321    ops/s r.JmhIHMBench.bench_put_peter7noloop    thrpt        10 84796057,588  2641680,027    ops/s r.JmhIHMBench.bench_put_peter8          thrpt        10 106910134,068  1880471,925    ops/s r.JmhIHMBench.bench_put_peter8noloop    thrpt        10 116141855,333  3003362,217    ops/s      /     / jdk9 (run 1): Benchmark                                Mode   Samples        Score  Score error    Units r.JmhIHMBench.bench_put_original        thrpt        10 99263492,210  2022006,733    ops/s r.JmhIHMBench.bench_put_peter7          thrpt        10 92134658,090  1614673,726    ops/s r.JmhIHMBench.bench_put_peter7noloop    thrpt        10 114824216,039 13609878,167    ops/s r.JmhIHMBench.bench_put_peter8          thrpt        10 105875616,712  2756803,410    ops/s r.JmhIHMBench.bench_put_peter8noloop    thrpt        10 115453779,958  2121710,424    ops/s      /     / jdk9 (run 2): Benchmark                                Mode   Samples        Score  Score error    Units r.JmhIHMBench.bench_put_original        thrpt        10 124206227,820  5152351,422    ops/s r.JmhIHMBench.bench_put_peter7          thrpt        10 106268224,078  2613094,225    ops/s r.JmhIHMBench.bench_put_peter7noloop    thrpt        10 119525275,412 11532080,356    ops/s r.JmhIHMBench.bench_put_peter8          thrpt        10 111851070,168  3486096,205    ops/s r.JmhIHMBench.bench_put_peter8noloop    thrpt        10 112861864,414  1780180,439    ops/s      */

@State(Scope.Thread) public class PeterIHMBench {

    private static final int MAX_SIZE = 100*1000;          Map<Object, Object> map_original = new IdentityHashMap<Object, Object>();     // etc.     Map<Object, Object> map_peter8noloop = new IdentityHashMapPeter8NoLoop<Object, Object>();

    @Benchmark     public void putNewObject_original(Blackhole bh) {         Object o = new Object();         bh.consume(map_original.put(o, o));         if (map_original.size() == MAX_SIZE) {             map_original = new IdentityHashMap<Object, Object>();         }     }     // etc.     @Benchmark     public void putNewObject_peter8noloop(Blackhole bh) {         Object o = new Object();         bh.consume(map_peter8noloop.put(o, o));         if (map_peter8noloop.size() == MAX_SIZE) {             map_peter8noloop = new IdentityHashMapPeter8NoLoop<Object, Object>();         }     }

    public static void main(String[] args) throws RunnerException {         Options opt = new OptionsBuilder()                 .include("." + PeterIHMBench.class.getSimpleName() + ".")                 .warmupIterations(8)                 .measurementIterations(10)                 .threads(1)                 .forks(1)                 .shouldDoGC(true)                 .build();         new Runner(opt).run();     } }     /*      * jdk7u51 (run 1): Benchmark                                     Mode   Samples        Score  Score error    Units r.PeterIHMBench.putNewObject_original        thrpt        10 10004525,783   462787,537    ops/s r.PeterIHMBench.putNewObject_peter7          thrpt        10  9892505,005   214656,134    ops/s r.PeterIHMBench.putNewObject_peter7noloop    thrpt        10 11604018,473   254339,445    ops/s r.PeterIHMBench.putNewObject_peter8          thrpt        10 11498803,030   294423,574    ops/s r.PeterIHMBench.putNewObject_peter8noloop    thrpt        10 11507933,087   194513,444    ops/s      /     /      * jdk7u51 (run 2): Benchmark                                     Mode   Samples        Score  Score error    Units r.PeterIHMBench.putNewObject_original        thrpt        10 11697308,687   193861,487    ops/s r.PeterIHMBench.putNewObject_peter7          thrpt        10 11560736,048   277497,212    ops/s r.PeterIHMBench.putNewObject_peter7noloop    thrpt        10 11797755,781   271441,458    ops/s r.PeterIHMBench.putNewObject_peter8          thrpt        10 11467002,211   152606,682    ops/s r.PeterIHMBench.putNewObject_peter8noloop    thrpt        10 11359696,213   109906,982    ops/s      /     /      * jdk8u20 (run 1): Benchmark                                     Mode   Samples        Score  Score error    Units r.PeterIHMBench.putNewObject_original        thrpt        10 10556637,295   543838,781    ops/s r.PeterIHMBench.putNewObject_peter7          thrpt        10 10442158,366   157466,040    ops/s r.PeterIHMBench.putNewObject_peter7noloop    thrpt        10 11626264,545   196058,218    ops/s r.PeterIHMBench.putNewObject_peter8          thrpt        10 11340692,293   147050,945    ops/s r.PeterIHMBench.putNewObject_peter8noloop    thrpt        10 11227256,662   248432,999    ops/s      /     /      * jdk8u20 (run 2): Benchmark                                     Mode   Samples        Score  Score error    Units r.PeterIHMBench.putNewObject_original        thrpt        10 11685284,152   273100,180    ops/s r.PeterIHMBench.putNewObject_peter7          thrpt        10 11816196,692   204855,265    ops/s r.PeterIHMBench.putNewObject_peter7noloop    thrpt        10 11869428,586   245642,096    ops/s r.PeterIHMBench.putNewObject_peter8          thrpt        10 11451236,836   167196,443    ops/s r.PeterIHMBench.putNewObject_peter8noloop    thrpt        10 11220115,248   479475,990    ops/s      /     /      * jdk9 (run 1): Benchmark                                     Mode   Samples        Score  Score error    Units r.PeterIHMBench.putNewObject_original        thrpt        10 10225815,691   327563,053    ops/s r.PeterIHMBench.putNewObject_peter7          thrpt        10 10419083,948   300111,842    ops/s r.PeterIHMBench.putNewObject_peter7noloop    thrpt        10 11530842,399   195856,714    ops/s r.PeterIHMBench.putNewObject_peter8          thrpt        10 11465396,343   181196,117    ops/s r.PeterIHMBench.putNewObject_peter8noloop    thrpt        10 11808154,989   193408,009    ops/s      /     /      * jdk9 (run 2): Benchmark                                     Mode   Samples        Score  Score error    Units r.PeterIHMBench.putNewObject_original        thrpt        10 11215457,172   277124,889    ops/s r.PeterIHMBench.putNewObject_peter7          thrpt        10 11288888,493   227178,822    ops/s r.PeterIHMBench.putNewObject_peter7noloop    thrpt        10 11737293,594   193035,121    ops/s r.PeterIHMBench.putNewObject_peter8          thrpt        10 11526357,378   141718,661    ops/s r.PeterIHMBench.putNewObject_peter8noloop    thrpt        10 11756835,220   276815,538    ops/s      */

-Jeff



More information about the core-libs-dev mailing list