What does your benchmark call? Mandy
> On May 10, 2016, at 9:49 AM, Ralph Goers <ralph.go...@dslextreme.com> wrote: > > I just ran one of the Log4j performance tests that specifically captures > location information. To run the test I do > > java -jar log4j-perf/target/benchmarks.jar > ".*AsyncAppenderLog4j2LocationBenchmark.*" -f 1 -wi 10 -i 20 -t 4 -si true > > And the results are: > > java version "1.7.0_80 > > Benchmark Mode > Samples Score Error Units > o.a.l.l.p.j.AsyncAppenderLog4j2LocationBenchmark.throughputSimple thrpt > 20 124819.285 ± 3003.918 ops/s > > java version "1.8.0_65" > > Benchmark Mode > Samples Score Error Units > o.a.l.l.p.j.AsyncAppenderLog4j2LocationBenchmark.throughputSimple thrpt > 20 123209.746 ± 3064.672 ops/s > > > java version "9-ea" > Java(TM) SE Runtime Environment (build 9-ea+116) > > Benchmark Mode > Samples Score Error Units > o.a.l.l.p.j.AsyncAppenderLog4j2LocationBenchmark.throughputSimple thrpt > 20 96090.261 ± 4565.763 ops/s > > > This tells me that Java 9 is about 23% slower than previous versions in > walking the stack trace elements. > > Ralph > >> On Apr 13, 2016, at 12:03 PM, Mandy Chung <mandy.ch...@oracle.com> wrote: >> >> If you record all stack frames, I can believe Throwable is faster because of >> a recent optimization JDK-8150778 that has been made in jdk9 to improve the >> Throwable::getStackTraceElements method. >> >> Mandy >> >>> On Apr 13, 2016, at 11:49 AM, Ralph Goers <ralph.go...@dslextreme.com> >>> wrote: >>> >>> I did a raw test of StackWalker by itself and the performance was much >>> better than using a Throwable to get the location information. However, I >>> haven’t tested how it will be implemented in Log4j. We still support Java >>> 7 (and will for some time) so we have to find a way to support using >>> StackWalker when running on Java 9 even though we build with Java 7. >>> >>> Ralph >>> >>>> On Apr 13, 2016, at 10:27 AM, Mandy Chung <mandy.ch...@oracle.com> wrote: >>>> >>>> It is good to know Log4J is planning to use StackWalker. >>>> >>>> Thanks for the feedback. I will reconsider. >>>> >>>> One thing to mention is the patch went in jdk9/hs-rt that will show up in >>>> jdk9/dev some time that changes the implementation to create >>>> StackTraceElement to get filename and line number. The object allocation >>>> should be cheap that does create short-lived objects. The main motivation >>>> of JDK-8153123 was to simplify the hotspot implementation that the runtime >>>> team had concern about. There is an open issue to follow up the >>>> performance (JDK-8153683). It’d be helpful to get your feedback on using >>>> StackWalker API and the performance data. >>>> >>>> Mandy >>>> >>>>> On Apr 13, 2016, at 6:51 AM, Ralph Goers <ralph.go...@dslextreme.com> >>>>> wrote: >>>>> >>>>> I had planned on using StackWalker to generate the location information >>>>> for every logging event. It seems that this change would thus cause the >>>>> creation of a new StackTraceElement for every logger event. That seems >>>>> wasteful. Log4j is currently in the process of trying to reduce the >>>>> number of objects that are created while logging as it has a significant >>>>> impact on garbage collection. So I am also in favor of getting the >>>>> filename and line number directly from the StackFrame. >>>>> >>>>> Ralph >>>>> >>>>>> On Apr 12, 2016, at 5:15 PM, Mandy Chung <mandy.ch...@oracle.com> wrote: >>>>>> >>>>>> >>>>>>> On Apr 12, 2016, at 1:34 AM, Rémi Forax <fo...@univ-mlv.fr> wrote: >>>>>>> >>>>>>> Hi Mandy, >>>>>>> I really don't like this patch. >>>>>>> >>>>>>> Being forced to call toStackElement to get the line number is counter >>>>>>> intuitive. >>>>>>> I would prefer the two methods to not return Optional but an int and a >>>>>>> String with the same convention as StackElement if the point of this >>>>>>> patch is to remove the dependency to Optional. >>>>>>> >>>>>> >>>>>> I was expecting the common usage of StackWalker API does not need file >>>>>> name and line number. I think it'd be useful to include >>>>>> StackFrame::getBci (in the future it might include live information like >>>>>> locals etc) and keep the optional stuff and uncommon usage to >>>>>> StackTraceElement. >>>>>> >>>>>> Mandy >>>>>> >>>>>> >>>>>>> Rémi >>>>>>> >>>>>>> >>>>>>> Le 11 avril 2016 23:22:39 CEST, Mandy Chung <mandy.ch...@oracle.com> a >>>>>>> écrit : >>>>>>>> Webrev at: >>>>>>>> http://cr.openjdk.java.net/~mchung/jdk9/webrevs/8153912/webrev.00/index.html >>>>>>>> >>>>>>>> StackFrame::getFileName and StackFrame::getLineNumber are originally >>>>>>>> proposed with the view of any stack walking code can migrate to the >>>>>>>> StackWalker API without the use of StackTraceElement. >>>>>>>> >>>>>>>> File name and line number are useful for debugging and troubleshooting >>>>>>>> purpose. It has additional overhead to map from a method and BCI to >>>>>>>> look up the file name and line number. >>>>>>>> >>>>>>>> StackFrame::toStackTraceElement method returns StackTraceElement that >>>>>>>> includes the file name and line number. There is no particular benefit >>>>>>>> to duplicate getFileName and getLineNumber methods in StackFrame. It is >>>>>>>> equivalently convenient to call >>>>>>>> StackFrame.toStackTraceElement().getFileName() (or getLineNumber). >>>>>>>> >>>>>>>> This patch proposes to remove StackFrame::getFileName and >>>>>>>> StackFrame::getLineNumber methods since such information can be >>>>>>>> obtained from StackFrame.toStackTraceElement(). >>>>>>>> >>>>>>>> Mandy >>>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>> >>>> >>> >>> >> >> >