开头声明变量在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中性能更好? [复制]的主要内容,如果未能解决你的问题,请参考以下文章