java:jdwp 会降低性能吗?

java: would jdwp slow down the performance?

众所周知,在jdk 5之后,不需要指定-Xdebug进行调试,而是使用-agentlib:jdwp,但是否意味着调试模式消失了?这是否意味着 java 程序会 运行 在正常模式下没有任何性能折衷,而您仍然可以随时附加它来调试它?

与C/C++相比,您可以调试在优化模式下编译的应用程序,只要您不去除调试符号即可,尽管在优化模式下调试不那么精确,例如,由于一些函数是内联的或被删除的。那么顺便说一句,当您在构建应用程序时需要注意时,java 是否有调试 symbols/info 的概念?

As known, after jdk 5, no need to specify -Xdebug for debugging, instead, use -agentlib:jdwp, but does it mean debug mode is gone?

是的。老派调试模式消失了。 (-Xdebug 选项被现代 JVM 忽略。)

And does it mean the java program would run in normal mode without any performance trade-off, while you could still attach it anytime you want to debug it?

例如参见Overhead of enabling JVMTI *capability* to query local variables

有一些性能折衷 1,但小于 -Xdebug。 JVMTI 代理抑制 一些 JIT 编译器优化,不是全部。

Does java have the concept of debug symbols/info when you need to take care when building the app?

是的。请参阅 javac-g 选项。


1 - 大多数消息来源都说成本很小或可以忽略不计,但我看到一条评论声称性能下降了 10 倍。目前尚不清楚这是 -agentlib:jdwp 的成本......还是评论者对代理人做了什么。例如,如果您启用进入/退出跟踪,性能成本会很大。不幸的是,这都是轶事......