打开和关闭 Javac 调试之间是否存在性能差异?
2022-08-31 16:11:17
如果我使用Javac打开调试信息的生成,那么类文件会大20-25%。这对运行 Java 程序是否有任何性能影响?如果是,在哪些条件下和多少。我预计对加载类会有一点影响,因为文件更大,但这应该是最小的。
如果我使用Javac打开调试信息的生成,那么类文件会大20-25%。这对运行 Java 程序是否有任何性能影响?如果是,在哪些条件下和多少。我预计对加载类会有一点影响,因为文件更大,但这应该是最小的。
在任何语言中,调试信息都是元信息。就其性质而言,它会增加对象文件的大小,从而增加加载时间。在调试器外部执行期间,此信息实际上被完全忽略。如 JVM 规范中所述(尽管不清楚),调试信息存储在字节码流之外。这意味着在执行时,类文件中没有差异。如果你想确定,试试吧:-)。
Ps. 通常对于调试,关闭优化是有价值的。这确实会影响性能。
仅关闭调试应该不会有任何区别。但是,一旦关闭调试并打开优化,您应该会看到差异,因为这会在编译时进行一些静态优化。这样,即使您的热点优化代码在运行时也能更快。
但到目前为止,在获得完整的堆栈跟踪或具有更多用户性能之间的权衡,我总是投票支持堆栈跟踪。毕竟,用户愿意每年花费1000美元来获得更快的机器,但不愿意花15分钟给你有意义的错误消息给你解决他们的问题。
多年后,我更愿意把我的15分钟比用户的1000美元高。:)