【问题标题】:Declaring variables at the beginning have better performance in java? [duplicate]开头声明变量在java中性能更好? [复制]
【发布时间】:2014-08-21 12:41:03
【问题描述】:

在代码开头声明变量和在我需要它们时声明它们(在可读性参数之外)之间是否存在性能差异?

假设我有以下两种选择:

选项1:

 public void methodA () 
 {
   int  amount;
   long id;
   String name;
   //do something
 }

选项2:

 public void methodB () 
 {
   int  amount;
   //do something 
   long id;
   //do something
   String name;
   //do something
 }

在我看来,选项 2 更美观、更易读,因此是我的偏好。

问:但我只是想知道这些声明的位置是否存在性能差异。

编辑:感谢 maaartinus 的输入,我发现我的基准示例是错误的(现已删除),我正在进一步研究如何编写/使用基准代码。

【问题讨论】:

  • 您的问题是关于 Java 还是 C++?具体以使其成为可回答的问题
  • 解释是java中的benchmark是harder than expected。您正在测量一些测量误差。
  • @maaartinus 感谢您的链接。我正在学习。
  • @maaartinus 你的意思是 System.nanoTime() 还是规则 4 的不准确(但我无法避免影响)
  • 不,当基准运行时间足够长时,这种不准确性是最小的问题。按照我提供的链接或谷歌出 caliper 或 jmh。

标签: java performance


【解决方案1】:

对于这些情况,我不希望看到任何性能差异,至少在 C++ 中是这样(尽管在 Java 中看到真正的差异我也会有点惊讶)。

如果您将变量的定义移动到循环之类的东西中,并且它是具有重要初始化的类型,则可能是一种例外:

int func() { 
    int amount;
    long id;
    string name;

    while (something) { 
        // ...
    }
    // ...    
}

对比:

int func() { 
    int amount;
    long id;

    while (something) { 
        string name;
    }
    // ...
}

在后一种情况下,循环的每次迭代都需要创建和初始化string,这可能比在循环执行之前创建和初始化一次要慢。

【讨论】:

  • 查看我的编辑和任何解释?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-10
  • 2010-11-12
  • 2011-12-14
相关资源
最近更新 更多