开启和关闭Javac调试之间是否存在性能差异



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

在任何语言中,调试信息都是元信息。它本质上增加了对象文件的大小,从而增加了加载时间。在调试器外部执行期间,这些信息实际上被完全忽略。正如JVM规范中概述的(尽管不清楚),调试信息存储在字节码流之外。这意味着在执行时类文件中没有差异。如果你想确定,试试看:-)。

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

单独关闭调试不会有任何区别。但是,一旦您关闭调试并打开优化,您应该会看到差异,因为这会在编译时进行一些静态优化。这样,即使您的热点优化代码在运行时也会更快。

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

多年后,我更愿意把我的15分钟价值比用户的1000美元高。:)

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

相关内容

最新更新