【问题标题】:Efficiency of accessing local variable vs field?访问局部变量与字段的效率?
【发布时间】:2017-03-16 12:06:33
【问题描述】:

我读到你应该避免在方法中过于频繁地引用一个字段,而是只做一次,将它分配给一个局部变量,例如:

public static void doSomething() {
    final Map<String, Integer> myMap = this.theMap;
    //do some processing with myMap
}

原因是效率,每次访问该字段需要更长的时间。这是你应该担心的事情吗?

【问题讨论】:

  • 你有这个声明的来源吗?
  • 不,不用担心。 “过早的优化是万恶之源”——DonaldKnuth
  • 答案是:,你不必担心这个。但是,与否决投票相比,作为stackoverflow.com/q/20750020/3182664 的副本关闭会更合适。并且问题的核心合理有效可以在另一个例子中看到:stackoverflow.com/q/7943763/3182664JDK的实现者正在这样做(出于多种原因,其中之一它们是性能优化的边界(!))

标签: java variables optimization reference


【解决方案1】:

这是绝对错误的。

如何访问变量(本地或使用类的成员)完全没有区别。最后,这两个字段将只包含对内存中相同位置的引用,而不会对性能产生任何影响。即使为您的类的字段使用 getter 也没有什么区别,因为 JIT 编译器一旦注意到这可能会提高性能,就会内联方法调用。

【讨论】:

    【解决方案2】:

    优化:它实际上什么也没做。优化器也会提供任何好处。

    唯一的好处是您,编码员,能够以不同的方式命名它,以便您更好地了解它在方法中的用途。

    public function test() {
        Produce harvestedFruits = this.produce;
        for(Produce fruit : harvestedFruits ) {
           if(fruit.isRotten()) {
                 harvestFruits.remove(fruit);
           }
        }
    }
    

    即便如此,我还是建议使用 getter 和 setter 方法,这样扩展的函数可以做自己的事情并且测试变得更容易,并且在相对高级的 IDE 中将鼠标悬停在方法上时,通过文档可以提供很好的亮点

      Produce fruit = this.getProduce();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-12
      • 1970-01-01
      • 1970-01-01
      • 2013-10-15
      • 2015-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多