【问题标题】:java: would jdwp slow down the performance?java:jdwp 会降低性能吗?
【发布时间】:2018-12-12 18:44:37
【问题描述】:

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

与 C/C++ 相比,您可以调试在优化模式下编译的应用程序,只要您不去除调试符号,尽管在优化模式下调试不是那么精确,例如,由于某些功能是内联或消除的。所以顺便说一句,当你在构建应用程序时需要小心时,java 是否有调试符号/信息的概念?

【问题讨论】:

    标签: java debugging jdwp


    【解决方案1】:

    众所周知,在jdk 5之后,无需指定-Xdebug进行调试,而是使用-agentlib:jdwp,但是否意味着调试模式消失了?

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

    这是否意味着 java 程序将在正常模式下运行而没有任何性能折衷,而您仍然可以随时附加它来调试它?

    例如,请参阅Overhead of enabling JVMTI *capability* to query local variables

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

    当你在构建应用程序时需要小心时,java 是否有调试符号/信息的概念?

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


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

    【讨论】:

    • 如果没有编译调试信息会怎样?而且似乎调试信息可以在单独的文件中生成?
    • 1) 然后你不会在堆栈跟踪中获得行号,符号调试器会给你更少的信息,等等。2) AFAIK 不在 Java 中。调试信息是“.class”文件的一部分。
    • 作为一个附带问题,在您看来,调试 java 程序(现代版本,如 jdk 8 或更高版本)最推荐的工具(独立的,不是特定于 ide 的)是什么?无论是免费的还是商业的。
    • 对推荐的请求是题外话。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多