RFR 8150778: Reduce Throwable.getStackTrace() calls to the JVM

Coleen Phillimore coleen.phillimore at oracle.com
Wed Mar 9 21:51:59 UTC 2016



On 3/9/16 4:12 PM, Coleen Phillimore wrote:
>
> Hi Harold,
> Thank you for the code review!
>
> I added a test for the stack trace logging.  I also made some other 
> minor changes that you pointed out.  I also added a function to find 
> the field offset from a char* which is used by "depth", but that can 
> be used by other things in javaClasses.cpp that need to know field 
> offsets without adding to vmSymbols.hpp.

I reverted this last change because it used CATCH to exit if there's an 
exception, ie didn't properly handle errors.  To pass a name to 
compute_offset() you need to add the string to vmSymbols.hpp for now.

Also hg added the test.

Thanks,
Coleen
>
> Also, I made the assertion changes discussed with David in this 
> version.   Reran some jck tests.
>
> open webrev at http://cr.openjdk.java.net/~coleenp/8150778.03_hotspot/
> open webrev at http://cr.openjdk.java.net/~coleenp/8150778.03_jdk/
>
> I didn't change jdk since 02.
>
> Thanks,
> Coleen
>
>
> On 3/9/16 2:35 PM, harold seigel wrote:
>> Hi Coleen,
>>
>> The JVM changes look good.  Could you add a test or test case for the 
>> new 'stacktrace' logging tag?
>>
>> Thanks, Harold
>>
>> On 3/2/2016 7:03 PM, Coleen Phillimore wrote:
>>> Freshly tested changes with jck tests, with missing checks and other 
>>> changes to use the depth field, as pointed out by Aleksey.  I've 
>>> kept the StackTraceElement[] allocation in Java to match the new API 
>>> that was approved.
>>>
>>> open webrev at http://cr.openjdk.java.net/~coleenp/8150778.02_hotspot/
>>> open webrev at http://cr.openjdk.java.net/~coleenp/8150778.02_jdk/
>>>
>>> Thanks,
>>> Coleen
>>>
>>> On 3/2/16 2:57 PM, Coleen Phillimore wrote:
>>>>
>>>>
>>>> On 3/2/16 1:58 PM, Aleksey Shipilev wrote:
>>>>> Hi Coleen,
>>>>>
>>>>> On 03/02/2016 09:44 PM, Coleen Phillimore wrote:
>>>>>> Summary: replace JVM_GetStackTraceDepth and 
>>>>>> JVM_GetStackTraceElement,
>>>>>> with JVM_GetStackTraceElements that gets all the elements in the
>>>>>> StackTraceElement[]
>>>>>>
>>>>>> These improvements were found during the investigation for replacing
>>>>>> Throwable with the StackWalkAPI.   This change also adds iterator 
>>>>>> for
>>>>>> BacktraceBuilder to make changing format of backtrace easier.
>>>>>>
>>>>>> Tested with -testset core, RBT nightly hotspot nightly tests on all
>>>>>> platforms, and jck tests on linux x64.  Compatibility request is 
>>>>>> approved.
>>>>>>
>>>>>> open webrev at http://cr.openjdk.java.net/~coleenp/8150778_jdk/
>>>>>> open webrev at http://cr.openjdk.java.net/~coleenp/8150778_hotspot
>>>>>> bug link https://bugs.openjdk.java.net/browse/JDK-8150778
>>>>> Looks interesting!
>>>>>
>>>>> Is there an underlying reason why we can't return the pre-filled
>>>>> StackTraceElements[] array from the JVM_GetStackTraceElements to 
>>>>> begin
>>>>> with? This will avoid leaking StackTraceElement constructor into
>>>>> standard library, *and* allows to make StackTraceElement fields 
>>>>> final.
>>>>> Taking stuff back from the standard library is hard, if not 
>>>>> impossible,
>>>>> so we better expose as little as possible.
>>>>
>>>> We measured that it's faster to allocate the StackTraceElement 
>>>> array in Java and it seems cleaner to the Java guys.
>>>> It came from similar code we've been prototyping for StackFrameInfo.
>>>>>
>>>>> Other minor nits:
>>>>>
>>>>>   * Initializing fields to their default values is a code smell in 
>>>>> Java:
>>>>>       private transient int depth = 0;
>>>>
>>>> ok, not sure what "code smell" means but it doesn't have to be 
>>>> initialized like this.  It's set in the native code.
>>>>>
>>>>>   * Passing a null array to getStackTraceElement probably SEGVs? I 
>>>>> don't
>>>>> see the null checks in native parts.
>>>>
>>>> Yes, it would SEGV.  I'll add some checks for null and make sure 
>>>> it's an array of StackTraceElement.
>>>>
>>>> Thanks,
>>>> Coleen
>>>>>
>>>>> Thanks,
>>>>> -Aleksey
>>>>>
>>>>
>>>
>>
>



More information about the hotspot-runtime-dev mailing list