如果我打开使用Javac生成调试信息,则类文件大20-25%.这对运行Java程序有任何性能影响吗?如果是,在哪些条件和多少.我希望对加载类有一点影响,因为文件较大但这应该是最小的.
在任何语言中,调试信息都是元信息.它本质上增加了目标文件的大小,从而增加了加载时间.在调试器外部执行期间,实际上完全忽略了此信息.如JVM规范中所述(尽管不清楚),调试信息存储在字节码流之外.这意味着在执行时,类文件没有区别.如果你想确定,试试看:-).
PS.通常用于调试,关闭优化是有价值的.这确实会对性能产生影响.
单独关闭调试不应该有所作为.但是一旦关闭调试并启用优化,您应该看到一个区别,因为这会在编译时进行一些静态优化.这样,即使您的热点优化代码在运行时也会变得更快.
但到目前为止,在获得意义完全堆栈跟踪或具有更多用户性能之间的权衡,我总是投票支持堆栈跟踪.毕竟,用户愿意每年花1000美元来获得更快的机器,但不愿意花15分钟给你带来有意义的错误信息来解决他们的问题.
多年以后,我更愿意比用户的1000美元高出15分钟.:)
请注意,由于JDK1.3 javac忽略了任何优化标志,因此"编译时优化是不必要的"