我最近注意到,有一些Java库(JDK,joda time,iText)在编译时没有部分/全部调试信息。要么缺少局部变量信息,要么缺少局部变量信息和行号。
有什么理由吗?我意识到这会使编译后的代码更大,但我认为这不是一个特别大的考虑因素。还是仅使用默认的编译选项进行构建?
谢谢。
最佳答案
默认的编译选项不包含调试信息,您必须明确告诉编译器包括调试信息。大多数人忽略它有几个原因:
[编辑]正如John指出的那样,Java字节码如今已不再(很多)优化。因此,在两种情况下,类文件的输出将相同(只有具有调试信息的类文件会更大)。该代码在运行时在JIT中进行了优化,从而使运行时可以针对CPU,内存(数量和布局)等对代码进行优化。
提到的5%罚款是在您运行代码并添加命令行选项以允许远程调试器附加到进程时。如果您不启用远程调试,则不会有任何损失(类加载除外,但这只会发生一次)。