So my code runs slow ( faster now with 23b15 by 2x but still 2x too slow) 
and I was wondering how to look for the issue.
I was going to look for a java profiler but then I remembered a blog by 
Rémi on a code coverage monitor
using method handles.  So I decided to write my own profiler.

The key code is below and it shows the power of methodHandles is ways one 
may not expect.  And it
added almost nothing to the run time ( maybe a few %).  It inserts itself 
into each callsite target and
collect entry and exit data.

pretty cool
thanks for the toolset

mark
        by the was 'this' is the callSite,  and this handles all airities
      // now add the profile stuff collect number of calls and the entry 
and exit times
      if( RtDebugger._profileEnable){
        mt=MethodType.methodType(RtObject[].class, RtCallSite.class, 
RtObject[].class);
        try {
          profileEntry = lookup.findStatic(RtDebugger.class, 
"profileEntry", mt); 
        }
        catch (Throwable e) {
          e.printStackTrace();
        } 
          profileEntry = MethodHandles.insertArguments(profileEntry, 0, 
this);
        // I have to collect the invoker, bind the call site to the entry 
filter
        // filter the invoker and then spread the invoker 
        invoker = invoker.asSpreader(RtObject[].class, _airity);
        invoker = MethodHandles.filterArguments(invoker , 0, 
profileEntry);
        invoker = invoker.asCollector(RtObject[].class, _airity);
      // now the profile exit which collects exit time
        mt=MethodType.methodType(RtObject.class, RtCallSite.class, 
RtObject.class);
        try {
          profileExit = lookup.findStatic(RtDebugger.class, "profileExit", 
mt); 
        }
        catch (Throwable e) {
          e.printStackTrace();
        } 
        profileExit = MethodHandles.insertArguments(profileExit, 0, this);
        invoker = MethodHandles.filterReturnValue(invoker , profileExit);
      }

_______________________________________________
mlvm-dev mailing list
mlvm-dev@openjdk.java.net
http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev

Reply via email to