How to retrieve the receiver object of method call

David Holmes David.Holmes at oracle.com
Thu Apr 8 17:50:03 PDT 2010


Peng Du said the following on 04/09/10 07:27:
> I guess my current solution is not viable. The reason why I want to
> do it ad-hoc is that there are some events that will happen in the
> entry of a method that I have previously setup. They are not at the
> call sites. But, my analysis is on a per instance basis since each
> instance carries some payload I allocated.
> 
> I used to cache the receiver objects to JavaThread when I see
> _invokeXXX bytecodes. But when GC comes, it seems it would move this
> object away and cause SIGSEGV when later I try to retrieve it.
> Besides, caching the receiver for every Java calls is not efficient I
> guess.

Use a Handle to protect the object reference. May not be efficient but 
should solve your SEGV problems.

David Holmes

> 
> Can you suggest some other approach? I can explain more what I am
> doing if that's helps.
> 
> Thanks, Tom!
> 
> -Peng
> 
> 
> On 04/08/2010 04:19 PM, Tom Rodriguez wrote:
>> Well, you kind of have to look at the compiled frame as a set of 
>> vframes to get access to the locals unless you want to build it all
>>  yourself.  Basically you'd grab the PcDesc for the pc and look at
>> the debug info to find the mapping from local 0 of the root of the
>>  compiled frame to some register or stack slot.  This requires
>> having a proper RegisterMap and being at a pc that has debug info,
>> which is pretty much only call sites.  If you want to be able to
>> get it at arbitrary pcs then you are out of luck.
>> 
>> Why can't you just arrange to grab the value you need directly
>> instead of trying to get at it introspectively?
>> 
>> tom
>> 
> 


More information about the hotspot-dev mailing list