为什么添加方法级断点会对调试模式下的程序性能产生负面影响?
采取以下(有点人为)的例子:
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
}
Run Code Online (Sandbox Code Playgroud)
这个表现约为:
这是怎么回事?方法级别调试给我们带来的好处是普通方法不能做什么?
谢谢!
编辑
时间只是近似值,包括我对断点做出反应并继续应用程序所需的时间(看起来大约是1秒钟).
我很欣赏System.currentTimeMillis()不是100%准确,但结果在多次测试中是一致的,并且性能差异很大!事实上,添加方法级别断点会导致IntelliJ发出警告,它会对性能产生影响.