代码之家  ›  专栏  ›  技术社区  ›  euphoria83

Java中的对象创建缓慢[关闭]

  •  -6
  • euphoria83  · 技术社区  · 14 年前

    我的经验表明,Java中的对象创建非常缓慢。通常,我只是通过删除对象创建并重复使用相同的对象来优化代码。

    有人在几个语言上描述过这个吗?

    2 回复  |  直到 14 年前
        1
  •  19
  •   nos    14 年前

    试试看你从中得到了什么-一些尝试让虚拟机不优化循环的练习:

    import java.util.ArrayList;
    import java.util.Random;
    
    class DummyInteger {
        private int i;
        public DummyInteger(int i) {
            this.i = i;
        }
        public int getI() {
            return i;
        }
    }
    
    public class ObjectCreationTest {
    
        final static int ITERATIONS = 2000000;
        public static void main(String[] args) {
            Random r = new Random(System.currentTimeMillis());
    
            int[] randArr = new int[ITERATIONS];
            for(int i = 0; i < ITERATIONS; i++) {
                randArr[i] = r.nextInt();
            }
            DummyInteger[] iArr = new DummyInteger[ITERATIONS];
            long start = System.currentTimeMillis();
            for(int i = 0; i < ITERATIONS; i++) {
                ArrayList<DummyInteger> list = new ArrayList<DummyInteger>(); 
                list.add(new DummyInteger(randArr[i]));
                iArr[i] = list.get(0);
            }
            long end = System.currentTimeMillis();
            System.out.println(String.format("Creating %d objects took %d ms",ITERATIONS*2,end-start));
            int sum = 0;
            for(DummyInteger mi: iArr) {
                sum += mi.getI();
            }
            System.out.println(sum);
            }
    }
    

    我得到了

    每个物体应该在170纳秒左右。

        2
  •  9
  •   mtsz    12 年前

    可能会有 noticeable CPU impact 在极少数情况下,通常情况下,为当前虚拟机创建对象的速度会尽可能快。

    Here “都市表演传奇” ,我认为这只是其中一个神话。

    还可以看看 http://www.javaperformancetuning.com/tips/rawtips.shtml

    当做。