java中自动装箱带来的性能问题

之前没有特别注意自动封装所带来的性能问题,今天看了effective java,实验了一下,结果大吃一惊;

考虑下面这段代码:

public static void main(String args[]){

  Long sum =0L;

  for(long i = 0;i < Integer.MAX_VALUE;i++){

    sum+=i;

  }

  System.out.println(sum);

}

运行这段代码我机器耗时是7000ms;

我们再看下面这段代码:

public static void main(String args[]){

  long sum =0L;

  for(long i = 0;i < Integer.MAX_VALUE;i++){

    sum+=i;

  }

  System.out.println(sum);

}

运行时所消耗的时间是1000ms;

 

这两段代码有什么区别呢,细心的小伙伴可能已经发现,sum的类型有区别,前一个是Long类型,

后一个是long类型;两个都是长整形,只是Long是对long的一个包装,但是在这个程序中运行速度却差异明显;

为什么呢?我们知道,在java 将long 转换为 Long 时,中间会生成Long对象,如果计算次数很多,其中每次又使用了java提供的自动装箱机制,

那么这个过程中就会出现大量的Long对象;以上的程序中就是这种情况,结果表明这对性能影响是很大的;

 

总结与反思:在大循环中应避免使用自动封装机制;

posted @ 2016-03-22 10:13  qinmp  阅读(269)  评论(0编辑  收藏  举报