java - Java 中的内存效率

标签 java optimization memory jvm

关于内存使用和变量实例化哪个更好还是没有区别:

这个

for(int i = 0; i < someValue; i++)
{
    Obj foo = new Obj();
    Use foo.....
}

相对于:

Obj foo;

for(int i = 0; i < someValue; i++)
{
    foo = new Obj();
    Use foo.....
}

最佳答案

没有区别。编译器将优化内存使用方面的任何潜在差异。

如果您编译(使用javap -c)这两个示例并比较字节码,您会发现字节码是相同的。当然,这取决于 JVM 版本。但由于这个示例非常简单,可以安全地假设两者都不比另一个更有效。


示例 1:

代码:

public class example1 {
    public static void main(String[] args) {
        for (int i=0; i<10; i++) {
            Object a = new Object();
        }
    }
}

字节码:

public class example1 extends java.lang.Object{
public example1();
  Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return

public static void main(java.lang.String[]);
  Code:
   0:   iconst_0
   1:   istore_1
   2:   iload_1
   3:   bipush  10
   5:   if_icmpge       22
   8:   new     #2; //class java/lang/Object
   11:  dup
   12:  invokespecial   #1; //Method java/lang/Object."<init>":()V
   15:  astore_2
   16:  iinc    1, 1
   19:  goto    2
   22:  return
}

例子2:

代码:

public class example2 {
    public static void main(String[] args) {
        Object a;
        for (int i=0; i<10; i++) {
            a = new Object();
        }
    }
}

字节码:

public class example2 extends java.lang.Object{
public example2();
  Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return

public static void main(java.lang.String[]);
  Code:
   0:   iconst_0
   1:   istore_2
   2:   iload_2
   3:   bipush  10
   5:   if_icmpge       22
   8:   new     #2; //class java/lang/Object
   11:  dup
   12:  invokespecial   #1; //Method java/lang/Object."<init>":()V
   15:  astore_1
   16:  iinc    2, 1
   19:  goto    2
   22:  return
}

关于java - Java 中的内存效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10768813/

相关文章:

c++ - 有效地随机改组单词序列的位

java - 针对小文件优化Java的NIO

IOS ARC NSMutableArray 我需要在为其分配新内存之前删除所有对象吗

java - 如何使 JavaFx 中的 TableView 响应式?

sql - 我如何优化这个查询?

c++ - 如何增加在堆栈/堆上分配的最大内存

c# - 为什么分配的内存比预期的多?

java - Integer.valueOf() 与 Integer.parseInt()

java - 检查字符串中特定单词的数量

java - 在 Java 中创建一个集合数组(?)