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

Coleen Phillimore coleen.phillimore at oracle.com
Thu Mar 10 15:40:52 UTC 2016


Thank you, Harold!
Coleen

On 3/10/16 9:56 AM, harold seigel wrote:
> Hi Coleen,
>
> The changes look good.  Thanks for adding the new test.
>
> Harold
>
> On 3/9/2016 4:51 PM, Coleen Phillimore wrote:
>>
>>
>> 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