OpenJdk interpreter

Nagy Mostafa nagy.mostafa at gmail.com
Thu Jul 3 11:51:35 PDT 2008


Thanks.

Yes, I thought about bytecode rewriting but I didn't want to go that way 
for two reasons:
1 - I am not sure what kind of optimizations the compiler will perform, 
so my instrumentation might be reordered. In other words, since I am 
inserting only calls to some java hooks in the bytecode and these calls 
have no dependency with the call I am trying to instrument, the compiler 
might choose to move my instrumentations around.

2 - I might be interested in profiling for some jvm internal data. So 
bytecode rewriting wouldn't help.


I will see what I can do.

thanks,
- nagy


Tom Rodriguez wrote:
> InterpreterRuntime::resolve_invoke would be a good instrumentation 
> point, though you'd have to modify the code in the generated 
> interpreter to always enter that code instead of only the first time a 
> call site is resolved. Start in the code for 
> TemplateTable::_invokevirtual and friends and step through that code 
> to see how it works. Obviously you'd have to disable the compilers 
> since your trick only works in the interpreter.
>
> Have you considered using bytecode rewriting to capture whatever it is 
> you're after?
>
> tom
>
> On Jul 3, 2008, at 11:11 AM, Nagy Mostafa wrote:
>
>> Thanks, Tim.
>> Yes, I know I can use JVMTI for the task, but I also wanted to 
>> collect call-site and some other specific info (e.g. field access) 
>> information. Can the JVM pass information about call site bytecode 
>> index/pointer to JVMTI ?
>>
>> - nagy
>>
>> On Wed, Jul 2, 2008 at 3:05 PM, Tim Bell <Tim.Bell at sun.com> wrote:
>> Nagy1981 wrote:
>> Hi, I am trying to modify the hotspot interpreter to collect some 
>> profile data.
>> The main thing I want to do is build a call-tree. I want to add a 
>> hook to
>> the interpreter whenever an invoke_* bytecode operation is about to 
>> execute
>> such that my call-tree gets updated. Can you please guide me to the 
>> part of
>> the code where control is passed from the interpreter to the assembly 
>> code
>> corresponding to a bytecode operation. All I can find is parts where the
>> assembly code get generated, but I can't figure out where it is 
>> executed.
>>
>> Have you looked at the javadoc for the JVMTI_EVENT_METHOD_ENTRY event?
>>
>> http://java.sun.com/javase/6/docs/platform/jvmti/jvmti.html#MethodEntry
>>
>> Does this supply the functionality you need? It would be easier to 
>> write a JVM TI agent [1] to collect this information than it would be 
>> to modify the interpreter.
>>
>> If you still want to modify the JVM code, read over jvmtiExport.cpp. 
>> Look for
>> void JvmtiExport::post_method_entry()
>>
>> If you still want to modify the JVM, look over the code base for 
>> calls to post_method_entry() and that should give you an idea where 
>> to start.
>>
>> Hope this helps - Tim Bell
>>
>> [1] The JVM Tool Interface (JVM TI): How VM Agents Work
>> http://java.sun.com/developer/technicalArticles/J2SE/jvm_ti/
>>
>
>




More information about the hotspot-dev mailing list