众所周知,在jdk 5之后,无需指定-Xdebug
进行调试,而是使用-agentlib:jdwp
,但这是否意味着调试模式已消失?这是否意味着Java程序将在正常模式下运行而无需进行任何性能折衷,而您仍可以在要调试的任何时候附加它?
与C / C ++相比,只要不剥离调试符号,就可以调试以优化模式编译的应用程序,尽管在优化模式下,由于例如以下原因,调试不那么精确。某些功能是内联的或已消除。顺便说一句,当您在构建应用程序时需要注意时,java是否具有调试符号/信息的概念?
答案 0 :(得分:1)
众所周知,在jdk 5之后,无需指定
-Xdebug
进行调试,而是使用-agentlib:jdwp,但这是否意味着调试模式已消失?
是的。老式的调试模式不见了。 (-Xdebug
选项被现代JVM忽略。)
这是否意味着Java程序将在正常模式下运行而无需进行任何性能折衷,而您仍可以在要调试的任何时候附加它?
例如,请参见Overhead of enabling JVMTI *capability* to query local variables。
在性能上需要权衡取舍 1 ,但少于-Xdebug
。 JVMTI代理会抑制一些 JIT编译器优化,而不是全部。
当您在构建应用程序时需要注意时,java是否具有调试符号/信息的概念?
是的。请参见-g
的{{1}}选项。
1-大多数消息人士称成本很小或可以忽略不计,但是我看到一条评论声称性能受到了十倍的打击。目前尚不清楚这是javac
的费用...还是评论者对代理的处理。例如,如果启用进入/退出跟踪,则性能成本会很高。不幸的是,这全都是轶事...