From b2d7da16e9fcae14a9d1bf3ff13793df16131509 Mon Sep 17 00:00:00 2001 From: Christian Wulf <chw@informatik.uni-kiel.de> Date: Sun, 15 Jun 2014 01:44:51 +0200 Subject: [PATCH] modified some performance tests --- .../java/teetime/util/StatisticsUtil.java | 4 ++-- ...odCallThoughputTimestampAnalysis7Test.java | 1 - .../MethodCallThroughputAnalysis3.java | 19 ++++++++++++------- .../MethodCallThroughputAnalysis7.java | 17 ++++++++++++++--- .../throughput/methodcall/NoopFilter.java | 1 + 5 files changed, 29 insertions(+), 13 deletions(-) diff --git a/src/main/java/teetime/util/StatisticsUtil.java b/src/main/java/teetime/util/StatisticsUtil.java index 00e2b16f..cd0e3d43 100644 --- a/src/main/java/teetime/util/StatisticsUtil.java +++ b/src/main/java/teetime/util/StatisticsUtil.java @@ -27,7 +27,7 @@ import teetime.examples.throughput.TimestampObject; /** * @author Christian Wulf - * + * * @since 1.10 */ public class StatisticsUtil { @@ -72,7 +72,7 @@ public class StatisticsUtil { public static void printQuintiles(final Map<Double, Long> quintileValues) { for (final Entry<Double, Long> entry : quintileValues.entrySet()) { - System.out.println((entry.getKey() * 100) + " % : " + TimeUnit.NANOSECONDS.toMicros(entry.getValue()) + " µs"); + System.out.println((entry.getKey() * 100) + " % : " + TimeUnit.NANOSECONDS.toNanos(entry.getValue()) + " ns"); } } diff --git a/src/test/java/teetime/examples/throughput/MethodCallThoughputTimestampAnalysis7Test.java b/src/test/java/teetime/examples/throughput/MethodCallThoughputTimestampAnalysis7Test.java index 7d816c11..ef511bb5 100644 --- a/src/test/java/teetime/examples/throughput/MethodCallThoughputTimestampAnalysis7Test.java +++ b/src/test/java/teetime/examples/throughput/MethodCallThoughputTimestampAnalysis7Test.java @@ -22,7 +22,6 @@ import java.util.concurrent.Callable; import org.junit.Before; import org.junit.Test; -import teetime.examples.throughput.methodcall.MethodCallThroughputAnalysis6; import teetime.examples.throughput.methodcall.MethodCallThroughputAnalysis7; import teetime.util.StatisticsUtil; import teetime.util.StopWatch; diff --git a/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis3.java b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis3.java index c627098a..29b7a0ab 100644 --- a/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis3.java +++ b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis3.java @@ -78,15 +78,20 @@ public class MethodCallThroughputAnalysis3 extends Analysis { @Override public boolean execute() { // extracting the null-check does NOT improve performance - Stage stage = stages[0]; - Object element = stage.execute(null); - if (element == null) { - return false; - } + // Stage stage = stages[0]; + // Object element = stage.execute(null); + // if (element == null) { + // return false; + // } + + Object element = null; - for (int i = 1; i < stages.length; i++) { - stage = stages[i]; + for (int i = 0; i < stages.length; i++) { + Stage stage = stages[i]; element = stage.execute(element); + if (element == null) { + return false; + } } return true; diff --git a/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis7.java b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis7.java index 965a101b..b9e4060e 100644 --- a/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis7.java +++ b/src/test/java/teetime/examples/throughput/methodcall/MethodCallThroughputAnalysis7.java @@ -64,7 +64,7 @@ public class MethodCallThroughputAnalysis7 extends Analysis { final StopTimestampFilter stopTimestampFilter = new StopTimestampFilter(); final CollectorSink<TimestampObject> collectorSink = new CollectorSink<TimestampObject>(this.timestampObjects); - final List<Stage> stageList = new ArrayList<Stage>(); + final List<AbstractStage> stageList = new ArrayList<AbstractStage>(); stageList.add(objectProducer); stageList.add(startTimestampFilter); stageList.addAll(Arrays.asList(noopFilters)); @@ -72,19 +72,30 @@ public class MethodCallThroughputAnalysis7 extends Analysis { stageList.add(collectorSink); // using an array decreases the performance from 60ms to 200ms (by 3x) - final Stage[] stages = stageList.toArray(new Stage[0]); + final AbstractStage[] stages = stageList.toArray(new AbstractStage[0]); final WrappingPipeline pipeline = new WrappingPipeline() { @Override public boolean execute() { // using the foreach for arrays (i.e., w/o using an iterator variable) increases the performance from 200ms to 130ms Object element = null; - for (Stage stage : stages) { + for (AbstractStage stage : stages) { element = stage.execute(element); if (element == null) { return false; } } + + // changing the type of stages decreases performance by 2 (e.g., NoopFilter -> Stage) + // the VM seems to not optimize the code anymore if the concrete type is not declared + + // for (final NoopFilter<TimestampObject> noopFilter : noopFilters) { + // element = noopFilter.execute(element); + // } + // + // element = stopTimestampFilter.execute(element); + // element = collectorSink.execute(element); + return true; } diff --git a/src/test/java/teetime/examples/throughput/methodcall/NoopFilter.java b/src/test/java/teetime/examples/throughput/methodcall/NoopFilter.java index a62cdbe4..f1d1367e 100644 --- a/src/test/java/teetime/examples/throughput/methodcall/NoopFilter.java +++ b/src/test/java/teetime/examples/throughput/methodcall/NoopFilter.java @@ -24,6 +24,7 @@ import teetime.util.list.CommittableQueue; */ public class NoopFilter<T> extends ConsumerStage<T, T> { + @SuppressWarnings("unchecked") @Override public T execute(final Object obj) { return (T) obj; -- GitLab