4

I need to measure how many seconds takes to execute a particular method via JFR. It is possible to do that? I tried async-profiler but I don't this feature.

Matrix12
  • 446
  • 8
  • 19

1 Answers1

2

If you have access to the source code, you can create an event:

@StackTrace(false)
@Name("MethodExecution")
@Label("Method Execution")
static class MethodExecution extends jdk.jfr.Event {
}

public void foo() {
   MethodExecution event = new MethodExecution();
   event.begin();
   bar();
   event.commit();
}

Then start JFR:

$ java -XX:StartFlightRecording:filename=measurement.jfr ...

Open the file in JDK Mission Control, or use the 'jfr' utility to print the results:

$ jfr print --events MethodExecution measurement.jfr

If you don't have access to the source, you may want to look into the JMC Agent that can add similar code like above using bytecode instrumentation.

Kire Haglin
  • 6,569
  • 22
  • 27