--- jsr166/src/test/loops/MapMicroBenchmark.java 2009/10/29 23:09:07 1.4 +++ jsr166/src/test/loops/MapMicroBenchmark.java 2015/01/15 18:34:19 1.17 @@ -1,12 +1,12 @@ /* * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at - * http://creativecommons.org/licenses/publicdomain + * http://creativecommons.org/publicdomain/zero/1.0/ */ -import java.util.*; import java.io.*; import java.math.*; +import java.util.*; /** * A micro-benchmark with key types and operation mixes roughly @@ -31,14 +31,14 @@ import java.math.*; * * For String keys, the program tries to use file "testwords.txt", which * is best used with real words. We can't check in this file, but you - * can create one from a real dictonary (1 line per word) and then run + * can create one from a real dictionary (1 line per word) and then run * linux "shuf" to randomize entries. If no file exists, it uses * String.valueOf(i) for element i. */ public class MapMicroBenchmark { static final String wordFile = "testwords.txt"; - static Class mapClass; + static Class mapClass; static boolean randomSearches = true; // Nanoseconds per run @@ -102,15 +102,15 @@ public class MapMicroBenchmark { jobs[2] = new Job("Integer ", is, Integer.class); Object[] ls = new Object[n]; - for (int i = 0; i < n; i++) ls[i] = Long.valueOf((long)i); + for (int i = 0; i < n; i++) ls[i] = Long.valueOf((long) i); jobs[3] = new Job("Long ", ls, Long.class); Object[] fs = new Object[n]; - for (int i = 0; i < n; i++) fs[i] = Float.valueOf((float)i); + for (int i = 0; i < n; i++) fs[i] = Float.valueOf((float) i); jobs[4] = new Job("Float ", fs, Float.class); Object[] ds = new Object[n]; - for (int i = 0; i < n; i++) ds[i] = Double.valueOf((double)i); + for (int i = 0; i < n; i++) ds[i] = Double.valueOf((double) i); jobs[5] = new Job("Double ", ds, Double.class); Object[] bs = new Object[n]; @@ -143,11 +143,11 @@ public class MapMicroBenchmark { warmup1(mixed); warmup3(jobs); Thread.sleep(500); - time(jobs); + time(jobs); } static void runWork(Job[] jobs, int minIters, int maxIters, long timeLimit) throws Throwable { - for (int k = 0; k < nsizes; ++k) { + for (int k = 0; k < nsizes; ++k) { int len = sizes[k]; for (int i = 0; i < jobs.length; i++) { Thread.sleep(50); @@ -160,7 +160,7 @@ public class MapMicroBenchmark { // First warmup -- run only mixed job to discourage type specialization static void warmup1(Job job) throws Throwable { - for (int k = 0; k < nsizes; ++k) + for (int k = 0; k < nsizes; ++k) job.work(sizes[k], 1, 1, 0); } @@ -193,7 +193,7 @@ public class MapMicroBenchmark { long[] aves = new long[nsizes]; int njobs = jobs.length; - for (int i = 0; i < njobs; i++) { + for (int i = 0; i < njobs; i++) { System.out.print(jobs[i].name); for (int k = 0; k < nsizes; ++k) { long nanos = jobs[i].nanos[k]; @@ -210,16 +210,15 @@ public class MapMicroBenchmark { System.out.println("\n"); } - static final class Job { - final String name; - final Class elementClass; + final String name; + final Class elementClass; long[] nanos = new long[nsizes]; final Object[] items; Object[] searches; volatile long checkSum; volatile int lastSum; - Job(String name, Object[] items, Class elementClass) { + Job(String name, Object[] items, Class elementClass) { this.name = name; this.items = items; this.elementClass = elementClass; @@ -236,8 +235,8 @@ public class MapMicroBenchmark { public long work(int len, int minIters, int maxIters, long timeLimit) { Map m; try { - m = (Map)mapClass.newInstance(); - } catch(Exception e) { + m = (Map) mapClass.newInstance(); + } catch (Exception e) { throw new RuntimeException("Can't instantiate " + mapClass + ": " + e); } Object[] ins = items; @@ -334,6 +333,12 @@ public class MapMicroBenchmark { if (m.put(x, x) == null) ++sum; } + /* // uncomment to avoid calling clear() + for (int i = 0; i < len; ++i) { + Object x = keys[i]; + m.remove(x); + } + */ m.clear(); sum += len - (quarter * 2); checkSum += sum ^ (sum << 12); @@ -350,14 +355,13 @@ public class MapMicroBenchmark { if (minIters != 1 && randomSearches) shuffleSome(ins, len, len >>> 3); } - long ops = ((long)j) * len * OPS_PER_ITER; + long ops = ((long) j) * len * OPS_PER_ITER; lastSum = sum; return elapsed / ops; } } - static final Random rng = new Random(3122688); // Shuffle the subarrays for each size. This doesn't fully @@ -365,7 +369,7 @@ public class MapMicroBenchmark { // more realistic static void scramble(Object[] a) { for (int k = 0; k < sizes.length; ++k) { - int origin = k == 0? 0 : sizes[k-1]; + int origin = (k == 0) ? 0 : sizes[k-1]; for (int i = sizes[k]; i > origin + 1; i--) { Object t = a[i-1]; int r = rng.nextInt(i - origin) + origin; @@ -377,7 +381,7 @@ public class MapMicroBenchmark { // plain array shuffle static void shuffle(Object[] a, int size) { - for (int i= size; i>1; i--) { + for (int i = size; i > 1; i--) { Object t = a[i-1]; int r = rng.nextInt(i); a[i-1] = a[r]; @@ -438,13 +442,13 @@ public class MapMicroBenchmark { BufferedInputStream in = new BufferedInputStream(fr); int k = 0; - outer:while (k < n) { + outer: while (k < n) { StringBuffer sb = new StringBuffer(); for (;;) { int c = in.read(); if (c < 0) break outer; - char ch = (char)c; + char ch = (char) c; if (ch == '\n') { keys[k++] = sb.toString(); break; @@ -458,7 +462,7 @@ public class MapMicroBenchmark { // fill up remaining keys with path-like compounds of previous pairs int j = 0; while (k < n) - keys[k++] = (String)keys[j++] + "/" + (String)keys[j]; + keys[k++] = (String) keys[j++] + "/" + (String) keys[j]; } }