如果我打开使用 Javac 生成调试信息,那么类文件会大 20-25%。这对运行 Java 程序有任何性能影响吗?如果是,在哪些条件和多少条件下。我希望对加载类有一点影响,因为文件更大,但这应该是最小的。
Horcrux7
问问题
18675 次
3 回答
63
在任何语言中,调试信息都是元信息。它本质上会增加目标文件的大小,从而增加加载时间。在调试器外部执行期间,此信息实际上被完全忽略。正如JVM 规范中概述的(虽然不是很清楚),调试信息存储在字节码流之外。这意味着在执行时类文件没有区别。如果您想确定,请尝试一下:-)。
附言。通常对于调试来说,关闭优化是有价值的。这确实会对性能产生影响。
于 2008-10-20T12:03:36.520 回答
15
单独关闭调试不应该有任何区别。但是一旦关闭调试并打开优化,您应该会看到不同之处,因为这会在编译时进行一些静态优化。这样,即使您的热点优化代码在运行时也会变得更快。
但到目前为止,在获得有意义的完整堆栈跟踪或拥有更多用户性能之间的权衡,我总是投票支持堆栈跟踪。毕竟,用户愿意每年花费 1000 美元来获得更快的机器,但不愿意花 15 分钟给你有意义的错误信息来解决他们的问题。
多年后,我更愿意把我的 15 分钟看重,而不是用户的 1000 美元。:)
于 2008-10-22T00:58:39.967 回答
8
请注意,由于 JDK1.3 javac 忽略任何优化标志,“编译时优化是不必要的”
于 2009-01-25T11:07:49.253 回答