为什么 Java 代码在调试器中速度变慢?

2022-09-01 21:52:19

某些 CPU 密集型例程在通过调试器运行时会变得非常慢。这是为什么呢?

目前,我只是使用IntelliJ来逐步执行在JBoss中运行的代码。当我启动 JBoss 时,我使用以下选项:

set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MaxPermSize=256m -Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n %JAVA_OPTS%

有没有办法加快执行速度?还是为了加快我不需要逐步执行的某些方法执行?


更新:似乎如果我不单步执行/进入CPU密集型例程(即:只需运行直到例程之后设置的断点),那么执行时间就好像不在调试器中一样。


答案 1

某些 CPU 密集型例程在通过调试器运行时会变得非常慢。这是为什么呢?

因为当启用调试时,JITter 不会对代码进行太多优化(通常,根本不优化)。


答案 2

它还取决于“断点样式”。例如,在变量上设置观察点或在接口级别放置断点(调试器将在执行所有方法实现时停止)通常会大大减慢处理时间。