性能提升:toString()

时间:2013-02-14 13:47:00

标签: java performance tostring

我们正在开发相当大的服务器应用程序。每个操作都由日志跟踪。调用toString方法的日志很多。不幸的是,我们需要其中大部分,另一方面我们无法追踪生产中发生的事情。 尝试改进toString方法是否有意义?例如,将toString的结果放在内存中,并在某些字段更新时更新。

example of my toString
public classs InMessage{
//declared 20+ fields
     @Override
      public String toString() {
       StringBuilder builder = new StringBuilder(this.getClass().getSimpleName());
       builder.append(": [");
       builder.append(super.toString());
       builder.append("; updateTime: ");
       builder.append(updateTime);
       //forexample 20 fields here
       builder.append(";]");
       return builder.toString();
     }}
then we process InMessage in some way and log each action
     log.debug("We received inMessage: {}", inMessage);
在讨论之后,我们决定减少可能的日志数量,仅此而已。

2 个答案:

答案 0 :(得分:7)

除非您正在积极地遇到性能或内存问题,否则请不要担心。有用的日志可以极大地帮助产品诊断,你需要权衡那些可能永远不会发生的假设性能问题。

(不是说你肯定会在这里没有问题,只是不要为那些不是真正问题的东西进行优化......)

编辑:相信你自己是否“记录太多”的判断;如果单个UI或服务操作生成20页的附带/调试级别信息,即使在INFO级别日志记录中,您可能希望优化内容以使其真正有用

答案 1 :(得分:3)

纳米优化通常最终会产生无用的努力,除了从几秒钟或有时几分钟内处理的时间减去一些ms之外,不会增加整体价值。取决于案例,但你的可能是每一点都很重要的案例之一。

根据数据确定优化需求,不要预先优化,特别是使用此类方法。我敢打赌,除了质疑toString的使用之外,还有其他方法可以证明更有价值,例如,改进常用算法的顺序或减少操作的负载(减少调用,但重要的调用)。

只是将toString的使用情况与您想到的解决方案进行比较,您是否正在实现一种观察者模式,如果字段发生更改,则会更新中央字符串存储库?那是在每个setter上执行代码(如果你使用那种方法)。