有什么理由我应该避免在我的Java类中使用Javac编译调试信息以便在生产服务器中使用吗?我应该注意哪些速度或安全问题?
请注意,我指的是调试信息,如堆栈跟踪中的行号,而不是记录器的调试级别。
有什么理由我应该避免在我的Java类中使用Javac编译调试信息以便在生产服务器中使用吗?我应该注意哪些速度或安全问题?
请注意,我指的是调试信息,如堆栈跟踪中的行号,而不是记录器的调试级别。
你的意思是使用调试选项进行编译吗? Javac调试开启和关闭之间是否存在性能差异?
你的意思是使用调试选项进行编译吗? Javac调试开启和关闭之间是否存在性能差异?
作为一名开发人员,我会建议尽可能多地离开。理由?
有一天,你会在程序中遇到一个错误 只要 你拥有的一条信息是一个堆栈跟踪,并且这个bug无法在命令中重现,它完全是原始程序员无法预料的,修复它是你的工作。在该堆栈中可用的信息越多越好!保留所有调试信息!
如果可以,则使用日志框架(以获取到文件的堆栈跟踪),该框架可以提供有关找到每个类的jar文件的信息。 Logback可以做到这一点,我相信log4j也可以。
你可能不是 允许 包括所有这些信息,但我相信你应该首先大叫并尖叫,并说它应该留在应急原因。
Performancewise我相信,因为HotSpot它并不重要。
如果你的意思是行号信息,对于打印堆栈跟踪,那么保持这种情况通常是一个好主意。客户可以在错误报告中粘贴堆栈跟踪供您使用。
如果您真的担心可见的方法名称,可以使用 ProGuard的 或其他一些混淆器。 ProGuard具有很好的属性,它可以对堆栈跟踪进行去混淆,因此客户仍然可以将它们发送给您。
混淆是不完美的,所以如果你不想花费精力,没有做就没有错。
取决于调试的过度和程序的性能敏感性。世界上90%的中等调试者都不必担心。
您始终可以使用预处理器来消除代码。
我同意BalusC的观点,生产中的loglevels通常可以设置得比生产中的更高(产量更少)。我认为完全删除日志记录会产生反作用。即使在生产代码错误发生,你 需要 记录信息以找出发生的事情。
断言语也不是问题,除非在性能敏感的代码中。您应该能够将它们完全保留,因为断言语句通常用于检查不会发生的事情(如果使用正确)。但是,通过麻烦,尽可能少,将它们拿出来并不是必需的。
我个人认为,在生产中安装的软件应该尽可能接近开发软件,因为它经常被测试。