启用调试信息的Java代码运行速度慢多少?
我想知道,如果我生成的所有Java代码中都包含调试信息,那么会对性能造成多大的损失。如果没有太多的惩罚,那么我可以在需要时在生产中获取非常有用的信息,而无需重新编译。我永远不会在任何生产环境中进行调试。如果您在prod上有问题,您需要尝试在开发或测试环境中重新创建它,这是您可能调试的地方。我猜您已经将所有日志设置为最高粒度,但这并没有揭示问题?我假设您考虑的是行号和局部变量名 这两种调试添加不会向字节码添加额外的指令。因此,性能应该不会受到影响。行号和变量名只是类文件中的额外表,除非您实际调试代码,否则它们将被忽略启用调试信息的Java代码运行速度慢多少?,java,Java,我想知道,如果我生成的所有Java代码中都包含调试信息,那么会对性能造成多大的损失。如果没有太多的惩罚,那么我可以在需要时在生产中获取非常有用的信息,而无需重新编译。我永远不会在任何生产环境中进行调试。如果您在prod上有问题,您需要尝试在开发或测试环境中重新创建它,这是您可能调试的地方。我猜您已经将所有日志设置为最高粒度,但这并没有揭示问题?我假设您考虑的是行号和局部变量名 这两种调试添加不会向字节码添加额外的指令。因此,性能应该不会受到影响。行号和变量名只是类文件中的额外表,除非您实际调试代
取决于调试的方式。如果您要将信息打印到控制台或文件,那么它肯定会占用一些性能。如果您使用的是日志API,那么也许您可以降低Qwerky提到的粒度,这应该会有所帮助。@Bart Kiers-hint=differentstory@Andreas_D,提示在这种情况下可能有用。OP必须重新编译代码以生成调试信息。对于Log4j、slf4j或jul这样的记录器,这是生产中的配置练习。@Andreas_D,你确定吗?你和祖贝尔是同一个人吗?:)当然,我可能错了,但你也可能错。我想我的提示在这种情况下可能会有所帮助(重点是“思考”)。你是说,安德烈亚斯·德和祖贝尔是同一个人,有两个账户吗?@Bart Kiers-我绝对不会用两个不同的账户登录而浪费名誉点数;)但问题中根本没有提到“日志记录”。“调试信息”是一个编译器选项。当你说“调试”时,你如何定义它?你的意思是逐步通过调试器还是插入?@Zubair我说的是用JPDA做任何事情。是的,日志记录被提升到最高粒度,但很多日志记录根本不存在。我不会在PROD上进行调试,但有时我需要调试信息,无论是用于日志记录的(例如,异常中的行号)或反射(保留参数名称)
-g
Generate all debugging information, including local variables.
By default, only line number and source file information is generated.
-g:none
Do not generate any debugging information.
-g:{keyword list}
Generate only some kinds of debugging information, specified by
a comma separated list of keywords. Valid keywords are:
source
Source file debugging information
lines
Line number debugging information
vars
Local variable debugging information