是否有任何理由我应该避免在我的 Java 类中使用 Javac 编译调试信息以便在生产服务器中使用?有什么我应该注意的速度或安全问题吗?
请注意,我指的是调试信息,例如堆栈跟踪中的行号,而不是记录器的调试级别。
您的意思是使用调试选项进行编译吗? Javac 调试打开和关闭之间有性能差异吗?
作为一名开发人员,我建议您保留尽可能多的内容。 道理是什么?
有一天,你会在程序中遇到一个错误,其中唯一的信息是堆栈跟踪,并且该错误无法通过命令重现,这是原始程序员完全没有预料到的,这是你的工作修复它。 堆栈跟踪中提供的信息越多越好! 保留所有调试信息!
如果可以,请使用日志记录框架(将堆栈跟踪获取到文件),它可以提供有关在其中找到每个类的 jar 文件的信息。 Logback 可以做到这一点,我相信 log4j 也可以。
您可能不被“允许”包含所有这些信息,但我相信您应该首先大喊大叫,并说出于应急原因应将其保留。 就性能而言,我相信自从 HotSpot 以来它就不再重要了。
您也可以随时使用预处理器来消除代码。
日志信息来找出发生了什么。 断言语句也不是那么大的问题,当然除非是在对性能非常敏感的代码中。您应该能够完全忽略它们,因为断言语句通常用于检查不可能发生的事情(如果使用正确)。但是,尽管麻烦不大,但把他们救出来并不是真的必要。
我个人认为,在生产中安装的软件应该尽可能接近开发软件,因为它已经过最频繁的测试。