Mik*_*e Q 19 java compilation debug-symbols
我最近注意到有一些java库(JDK,joda time,iText)在没有部分/全部调试信息的情况下编译.缺少局部变量信息,或者缺少局部变量信息和行号.
这有什么理由吗?我意识到它会使编译代码更大,但我不认为这是一个特别重要的考虑因素.或者它只是使用默认的编译选项构建?
谢谢.
Aar*_*lla 34
默认的编译选项不包含调试信息,您必须明确告诉编译器包含它.大多数人省略它有几个原因:
[编辑]正如John指出的那样,Java字节码今天不再优化(很多).因此,对于这两种情况,类文件的输出都是相同的(只有具有调试信息的类文件才会更大).代码在运行时在JIT中进行了优化,允许运行时优化CPU,内存(数量和布局)等代码.
提到的5%代价是运行代码并添加命令行选项以允许远程调试器附加到进程.如果您不启用远程调试,则不会受到惩罚(类加载除外,但只发生一次).