2008-10-20 33 views

回答

56

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

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

+0

是否javac的还有-O?最后我记得它相当于-g:无。 – 2008-10-20 12:33:56

+2

正确。加载时间受影响,但执行时间不受影响。 – kohlerm 2008-10-20 13:16:15

14

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

但到目前为止,得到意全栈的痕迹或有一些更多的用户性能之间的权衡,我总是投给了堆栈踪迹。毕竟,用户每年愿意花1000美元购买一台更快的机器,但不愿意花15分钟为您提供有意义的错误消息,以解决他们的问题。

这些年过去了,我更愿意重视我比用户的1000美元高出15分钟。 :)

5

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

相关问题