开头声明变量在java中性能更好? [复制]

Posted

技术标签:

【中文标题】开头声明变量在java中性能更好? [复制]【英文标题】:Declaring variables at the beginning have better performance in java? [duplicate] 【发布时间】: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。 【参考方案1】:

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

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

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

    while (something)  
        // ...
    
    // ...    

对比:

int func()  
    int amount;
    long id;

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

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

【讨论】:

查看我的编辑和任何解释?

以上是关于开头声明变量在java中性能更好? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Java 在 Linux 中性能调优最佳实践

变量性能 - java [重复]

以下哪个代码在 ASP.NET 2.0 中性能更好

Java中性能优化的45个细节

为啥可以在java的抽象类中声明瞬态变量? [复制]

我应该将 jQuery 选择器组合到变量中以获得更好的性能吗? [复制]