RFR (M) 8067662: "java.lang.NullPointerException: Method name is null" from StackTraceElement.<init>

Coleen Phillimore coleen.phillimore at oracle.com
Fri Mar 13 18:37:52 UTC 2015


On 3/13/15, 2:36 PM, serguei.spitsyn at oracle.com wrote:
> Coleen,
>
> Thank you for review and great idea to use the method name cp index!
> However, this approach is going stop working if we get rid of the CP 
> merge in the future.

Yes, it will.  I was just thinking about how to resolve that. We'll have 
to brainstorm this in the summer.
Coleen

>
> Thanks,
> Serguei
>
> On 3/13/15 10:40 AM, Coleen Phillimore wrote:
>>
>> Serguei,
>>
>> This looks good.  This works a lot harder to find the original method 
>> than the code used to.
>>
>> Thanks,
>> Coleen
>>
>> On 3/13/15, 1:27 AM, serguei.spitsyn at oracle.com wrote:
>>> Please, review the jdk 9 fix for:
>>>   https://bugs.openjdk.java.net/browse/JDK-8067662
>>>
>>>
>>> Open hotspot webrev:
>>> http://cr.openjdk.java.net/~sspitsyn/webrevs/2015/hotspot/8067662-JVMTI-trace.1/ 
>>>
>>>
>>> Open webrev for unit test update:
>>> http://cr.openjdk.java.net/~sspitsyn/webrevs/2015/jdk/8067662-JVMTI-trace-test.1/ 
>>>
>>>
>>>
>>> Summary:
>>>   An NPE is trown in a thread dumping via JMX when doing CPU 
>>> profiling in NetBeans Profiler and VisualVM.
>>>   The issue is that the methods and related klass versions are not 
>>> kept alive if a class redefinition
>>>   takes place between catching a Throwable and taking a thread dump.
>>>   It can result in loosing an obsolete method, and so, the 
>>> reconstruction of method name becomes impossible.
>>>   In such a case, the null reference is returned instead of a valid 
>>> method name.
>>>
>>>   The solution is to use current klass version and method orig_idnum 
>>> instead of ordinary method idnum
>>>   to find required method pointer. In the worst case when the 
>>> related klass version is gone
>>>   (was not included to or was removed from the previous_versions 
>>> linked list), a saved method name
>>>   CP index of the latest klass version can be used to restore the 
>>> method name.
>>>   The footprint extra overhead for this approach is u2 per stack frame.
>>>
>>>   The plan is also to backport the fix to 8u60.
>>>
>>> Testing:
>>>   In progress: nsk redefine classes tests, JTREG java/lang/instrument
>>>
>>>
>>> Thanks,
>>> Serguei
>>
>



More information about the serviceability-dev mailing list