java在内存分配方面的效率比较

标签 java performance memory-management memory-efficient

这可能是一个重复的问题,但我找不到我正在搜索的内容。如果存在,请原谅重复。

我想了解以下部分代码在内存分配方面是否相同。

//first
int n = some_number;
for(int i = 0; i < n; i++){
    for(int j = 0; j < n; j++){
        int a = something;
    }
}

//second
int i, j, a;
for(i = 0; i < n; i++){
    for(j = 0; j < n; j++){
        a = something;
    }
}

我想知道,如果 java 在与第二个代码一样,第一个代码或两者仅分配一次。

我在 Java 中尝试了这几次,但结果不一致,比如在一次试验中第一次是 8 秒,第二次是 9 秒,在另一次试验中是相反的。所以,我想确定它们是否相等,

谢谢

最佳答案

查看是否存在差异的一种简单方法是检查字节码。

第一个版本编译为:

  public static void f();
    Code:
       0: bipush        100
       2: istore_0      
       3: iconst_0      
       4: istore_1      
       5: goto          26
       8: iconst_0      
       9: istore_2      
      10: goto          18
      13: iconst_3      
      14: istore_3      
      15: iinc          2, 1
      18: iload_2       
      19: iload_0       
      20: if_icmplt     13
      23: iinc          1, 1
      26: iload_1       
      27: iload_0       
      28: if_icmplt     8
      31: return        

而第二个编译为:

  public static void g();
    Code:
       0: bipush        100
       2: istore_3      
       3: iconst_0      
       4: istore_0      
       5: goto          26
       8: iconst_0      
       9: istore_1      
      10: goto          18
      13: iconst_3      
      14: istore_2      
      15: iinc          1, 1
      18: iload_1       
      19: iload_3       
      20: if_icmplt     13
      23: iinc          0, 1
      26: iload_0       
      27: iload_3       
      28: if_icmplt     8
      31: return        

如果仔细比较它们,您会发现它们本质上是相同的。

从风格上讲,我认为最好在变量首次使用时尽可能接近地声明变量。考虑到这一点,我会选择第一个版本而不是第二个版本。

关于java在内存分配方面的效率比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15942926/

相关文章:

iOS - 内存分配 - 使用相同的变量构建数组

ios - GuardMalloc 导致虚拟内存耗尽

java - Maven 多模块清理和构建失败

java - java中的链表教程

sql - IF Exists 不同写法之间的区别?

java - 循环的简写是否缓存可迭代的引用?

java - 在 OsmDroid 中获取我的位置不起作用

java - 如何使用收集器进行分组

python - 使用 pandas 执行分组聚合和排序的更好方法

ios - 使用 SDWebImage 下载大图像时应用程序崩溃