【问题标题】:Is there a performance difference between Javac debug on and off?Javac 调试打开和关闭之间是否存在性能差异?
【发布时间】:2010-09-18 02:19:36
【问题描述】:

如果我打开使用 Javac 生成调试信息,那么类文件会大 20-25%。这对运行 Java 程序有什么性能影响吗?如果是,在哪些条件和多少条件下。我预计对加载类有一点影响,因为文件更大,但这应该是最小的。

【问题讨论】:

    标签: java performance debugging javac


    【解决方案1】:

    在任何语言中,调试信息都是元信息。它本质上会增加目标文件的大小,从而增加加载时间。在调试器外部执行期间,此信息实际上被完全忽略。正如JVM spec 中所述(尽管不清楚),调试信息存储在字节码流之外。这意味着在执行时类文件没有区别。如果您想确定,请尝试一下:-)。

    附言。通常对于调试来说,关闭优化是有价值的。这确实会对性能产生影响。

    【讨论】:

    • javac还有-O吗?最后我记得它相当于 -g:none。
    • 正确。加载时间受到影响,但执行时间不受影响。
    • 确实 sun java 编译器没有优化标志。优化主要发生在热点运行时。在编译时进行优化实际上可能会妨碍热点的优化能力(使用仅在编译时可用的完整信息)。
    • 多少影响大小和加载时间?是否有已经运行的基准测试可供我们查看?
    【解决方案2】:

    单独关闭调试应该不会有什么不同。但是一旦您关闭调试并打开优化,您应该会看到不同之处,因为这会在编译时进行一些静态优化。这样,即使您的热点优化代码在运行时也会变得更快。

    但到目前为止,在获得有意义的完整堆栈跟踪或获得更多用户性能之间的权衡,我总是投票支持堆栈跟踪。毕竟,用户愿意每年花费 1000 美元来获得更快的机器,但不愿意花 15 分钟给你有意义的错误信息来解决他们的问题。

    多年后,我更愿意将我的 15 分钟价值看得高于用户的 1000 美元。 :)

    【讨论】:

      【解决方案3】:

      请注意,由于 JDK1.3 javac 忽略任何优化标志,“编译时优化是不必要的”

      【讨论】:

        猜你喜欢
        • 2012-09-12
        • 1970-01-01
        • 2013-11-18
        • 2012-03-05
        • 2016-01-24
        • 2016-05-29
        • 2014-05-17
        • 2012-08-21
        相关资源
        最近更新 更多