[ https://issues.apache.org/jira/browse/LOG4J2-1359?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15923621#comment-15923621 ]
Ralph Goers commented on LOG4J2-1359: ------------------------------------- I have modified the test that locates the caller class and added a test to locate the caller's StackTraceElement using StackWalker using the same algorithm Log4j uses. The performance of locating the caller's Class is greatly improved from the numbers above and is now faster than using Reflection.getCallerClass(). Locating the caller's StackTraceElement is also much faster with StackWalker than walking the Throwable. I should point out that I tried various methods to locate the caller's class and StackTraceElement and finally settled on using the filter method as dropWhile() and reduce() were much slower. {code} Benchmark (limit) (skip) Mode Cnt Score Error Units StackWalkerGetCallerClass.securityManager N/A N/A avgt 20 1.478 ± 0.013 us/op StackWalkerGetCallerClass.stackwalkerGetImmediate N/A N/A avgt 20 1.185 ± 0.012 us/op StackWalkerGetCallerClass.stackwalkerSearch N/A N/A avgt 20 2.335 ± 0.017 us/op StackWalkerLimitBenchmark.stackWalkerStreamLimit 1 N/A avgt 20 2.397 ± 0.043 us/op StackWalkerLimitBenchmark.stackWalkerStreamLimit 2 N/A avgt 20 2.424 ± 0.027 us/op StackWalkerLimitBenchmark.stackWalkerStreamLimit 4 N/A avgt 20 2.757 ± 0.028 us/op StackWalkerLimitBenchmark.stackWalkerStreamLimit 6 N/A avgt 20 3.045 ± 0.031 us/op StackWalkerLimitBenchmark.stackWalkerStreamLimit 8 N/A avgt 20 7.804 ± 0.247 us/op StackWalkerLimitBenchmark.stackWalkerStreamLimit 10 N/A avgt 20 7.711 ± 0.062 us/op StackWalkerLimitBenchmark.stackWalkerStreamLimit 12 N/A avgt 20 7.984 ± 0.038 us/op StackWalkerLimitBenchmark.stackWalkerStreamLimit 14 N/A avgt 20 8.537 ± 0.342 us/op StackWalkerLimitBenchmark.stackWalkerStreamLimit 16 N/A avgt 20 13.232 ± 0.142 us/op StackWalkerLimitWithEstimatedSizeBenchmark.stackWalkerStreamLimit 1 N/A avgt 20 2.640 ± 0.049 us/op StackWalkerLimitWithEstimatedSizeBenchmark.stackWalkerStreamLimit 2 N/A avgt 20 2.514 ± 0.014 us/op StackWalkerLimitWithEstimatedSizeBenchmark.stackWalkerStreamLimit 4 N/A avgt 20 2.749 ± 0.179 us/op StackWalkerLimitWithEstimatedSizeBenchmark.stackWalkerStreamLimit 6 N/A avgt 20 2.627 ± 0.015 us/op StackWalkerLimitWithEstimatedSizeBenchmark.stackWalkerStreamLimit 8 N/A avgt 20 3.368 ± 0.028 us/op StackWalkerLimitWithEstimatedSizeBenchmark.stackWalkerStreamLimit 10 N/A avgt 20 4.156 ± 0.033 us/op StackWalkerLimitWithEstimatedSizeBenchmark.stackWalkerStreamLimit 12 N/A avgt 20 4.857 ± 0.093 us/op StackWalkerLimitWithEstimatedSizeBenchmark.stackWalkerStreamLimit 14 N/A avgt 20 5.461 ± 0.065 us/op StackWalkerLimitWithEstimatedSizeBenchmark.stackWalkerStreamLimit 16 N/A avgt 20 6.104 ± 0.088 us/op StackWalkerSkipBenchmark.stackWalkerStreamSkip N/A 1 avgt 20 12.613 ± 0.046 us/op StackWalkerSkipBenchmark.stackWalkerStreamSkip N/A 2 avgt 20 12.705 ± 0.156 us/op StackWalkerSkipBenchmark.stackWalkerStreamSkip N/A 4 avgt 20 12.484 ± 0.173 us/op StackWalkerSkipBenchmark.stackWalkerStreamSkip N/A 6 avgt 20 12.275 ± 0.063 us/op StackWalkerSkipBenchmark.stackWalkerStreamSkip N/A 8 avgt 20 12.552 ± 0.175 us/op StackWalkerSkipBenchmark.stackWalkerStreamSkip N/A 10 avgt 20 12.349 ± 0.167 us/op StackWalkerSkipBenchmark.stackWalkerStreamSkip N/A 12 avgt 20 12.564 ± 0.153 us/op StackWalkerSkipBenchmark.stackWalkerStreamSkip N/A 14 avgt 20 13.128 ± 0.476 us/op StackWalkerSkipBenchmark.stackWalkerStreamSkip N/A 16 avgt 20 13.246 ± 0.532 us/op StackWalkerVsExceptionBenchmark.exceptionStackTrace N/A N/A avgt 20 28.558 ± 0.343 us/op StackWalkerVsExceptionBenchmark.stackWalkerForEach N/A N/A avgt 20 12.873 ± 0.171 us/op StackWalkerVsExceptionBenchmark.stackWalkerForEachRetainClass N/A N/A avgt 20 12.828 ± 0.236 us/op StackWalkerVsExceptionBenchmark.stackWalkerForEachToStackTraceElement N/A N/A avgt 20 35.724 ± 0.123 us/op StackWalkerVsExceptionBenchmark.stackwalkerStackTrace N/A N/A avgt 20 3.763 ± 0.022 us/op{code} > Add support for Java 9 StackWalker API in ReflectionUtil > -------------------------------------------------------- > > Key: LOG4J2-1359 > URL: https://issues.apache.org/jira/browse/LOG4J2-1359 > Project: Log4j 2 > Issue Type: Improvement > Components: API > Environment: Java 1.9+ > Reporter: Matt Sicker > Assignee: Ralph Goers > Labels: jdk9 > > [StackWalker|http://download.java.net/jdk9/docs/api/java/lang/StackWalker.html] > Based on the functional nature of this API, supporting it may require > compiling at least one class using javac 1.9 and reflectively loading it in > ReflectionUtil similar to how Spring supports newer JDK APIs. > Without support for StackWalker, ReflectionUtil will fall back to using a > slower API in Java 1.9. This is because the Reflection class is a > sun-internal class which are no longer exported to non-JDK code without > setting special command line flags. -- This message was sent by Atlassian JIRA (v6.3.15#6346) --------------------------------------------------------------------- To unsubscribe, e-mail: log4j-dev-unsubscr...@logging.apache.org For additional commands, e-mail: log4j-dev-h...@logging.apache.org