Question

Why does adding a method level breakpoint have such a negative impact on program performance in debug mode?

Take the following (somewhat contrived) example:

public static void main(String[] args) {
    long start = System.currentTimeMillis();
    for(int a = 0; a <Integer.MAX_VALUE; a++) {
        long v = a * a;
        if(v == 100) {
            doSomething();
        }
    }
    System.out.println("Time: " + (System.currentTimeMillis() - start) + " ms");
}

private static void doSomething() {          //*** BREAKPOINT 2
    System.out.println("done something");    //*** BREAKPOINT 1
}

The performance of this is approximately:

  • Not in debug: 4.5 seconds
  • Debug, breakpoint 1: 6.0 seconds
  • Debug, breakpoint 2: 47.0 seconds

What's going on? What benefit does the method level debug give us that normal ones can't?

Thanks!

EDIT

The timings are only approximations and include the time it takes me to react to the breakpoint and continue the application (which looks to be roughly about 1 second).

I appreciate that System.currentTimeMillis() is not 100% accurate, however the results are consistent over multiple tests and the difference in performance is massive! In fact, adding the method level breakpoint results in a warning from IntelliJ that it will have an impact on performance.

Était-ce utile?

La solution

Recently I made a research regarding Method Breakpoint Slowness issue. My conclusion was that the root issue is that Method Breakpoints are implemented by using JDPA Method Entry & Method Exit feature. This implementation requires the JVM to fire an event each time any thread enters any method and when any thread exits any method.

click here to read the entire article

Autres conseils

According to Eclipse Help

While the breakpoint is enabled, thread execution suspends before that line of code is executed. The debugger selects the thread that has suspended and displays the thread's stack frames. The line where the breakpoint was set is highlighted in the editor in the Debug Perspective.

So according to me this may be the reason of this delay.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top