条件跟踪/日志记录调用的开销减少

时间:2015-05-01 20:19:01

标签: java performance debugging trace

为了跟踪和调试我的Java代码,我使用的是一个简单的Util类,而不是一个完整的日志框架:

public class Util {
    public static int debugLevel;

    public static void info(String msg) {
      //  code for logfile output
      //  handling of unprintable characters
      //  etc. omitted 
      System.out.println(msg);
    }

    public static void info4(String msg) {
        if (debugLevel >= 4) {
           info(msg);
        }
    }
}

这允许紧凑的单行语句,如下所示:

info4(String.format("%16s: ", host) + Util.toHex(sidNetto));

使用debugLevel变量,我可以控制程序的详细程度。通常,调试级别在执行开始时全局设置。但它也可以在常规水平上进行局部调整。

基本上,我在跟踪调用周围保存了重复的if (debugLevel >= DEBUG_ALL) {...}括号。但是,无论调试级别如何,都必须在运行时准备和传递调用的参数。

我的问题:

  

我如何轻推编译时优化器或JVM以删除多余的跟踪调用?我正在考虑C/C++函数内联的行。

讨论了C#的相关问题here。但我不知道如何将建议的答案移植到Java。 2010年的另一个related post讨论了与我类似的方法。我想知道像ProGuard这样的第三方工具是否真的需要它来解决这样一个共同的任务。

0 个答案:

没有答案