Add benchmarks for obtaining stack trace class array.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/415108f6 Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/415108f6 Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/415108f6 Branch: refs/heads/master Commit: 415108f6aac8213e1ab61025d03229b74ba18fd5 Parents: 85f01ff Author: Matt Sicker <[email protected]> Authored: Sat Oct 4 10:15:49 2014 -0500 Committer: Matt Sicker <[email protected]> Committed: Sat Oct 4 10:15:49 2014 -0500 ---------------------------------------------------------------------- .../log4j/perf/jmh/ReflectionBenchmark.java | 32 +++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/415108f6/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ReflectionBenchmark.java ---------------------------------------------------------------------- diff --git a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ReflectionBenchmark.java b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ReflectionBenchmark.java index 87e83f1..08f6a3d 100644 --- a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ReflectionBenchmark.java +++ b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ReflectionBenchmark.java @@ -22,27 +22,26 @@ import java.util.Random; import org.apache.logging.log4j.message.Message; import org.apache.logging.log4j.message.StringFormattedMessage; -import org.openjdk.jmh.annotations.Benchmark; import org.apache.logging.log4j.util.ReflectionUtil; +import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.Level; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.Setup; import org.openjdk.jmh.annotations.State; - import sun.reflect.Reflection; /** * <p> * Benchmarks the different ways the caller class can be obtained. To run this in sampling mode (latency test): * </p> - * + * * <pre> * java -jar benchmarks.jar ".*ReflectionBenchmark.*" -i 5 -f 1 -wi 5 -bm sample -tu ns * </pre> * <p> * To run this in throughput testing mode: * </p> - * + * * <pre> * java -jar benchmarks.jar ".*ReflectionBenchmark.*" -i 5 -f 1 -wi 5 -bm Throughput -tu ms * </pre> @@ -62,6 +61,14 @@ public class ReflectionBenchmark { } } + @State(Scope.Benchmark) + public static class ClassContextManager extends SecurityManager { + @Override + protected Class[] getClassContext() { + return super.getClassContext(); + } + } + @Benchmark public void baseline() { } @@ -118,4 +125,21 @@ public class ReflectionBenchmark { Object[].class); return constructor.newInstance("Hello %i", new Object[] { rng.random }); } + + @Benchmark + public Class<?>[] test11_getClassContextViaCallerClass() { + // let's not benchmark LinkedList or anything here + final Class<?>[] classes = new Class<?>[100]; + Class<?> clazz; + for (int i = 0; null != (clazz = ReflectionUtil.getCallerClass(i)); i++) { + classes[i] = clazz; + } + return classes; + } + + @Benchmark + public Class<?>[] test12_getClassContextViaSecurityManager(final ClassContextManager classContextManager) { + return classContextManager.getClassContext(); + } + }
