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
>>>> 
>>> 
>>> 
>> 
>> 
> 
> 


Reply via email to