zoukankan      html  css  js  c++  java
  • 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对象;以上的程序中就是这种情况,结果表明这对性能影响是很大的;

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

  • 相关阅读:
    字符串与Unicode码的相互转换
    关于es6中的yield
    ajax请求中的6个全局事件
    用H5上传文件
    类型化数组
    git笔记-9-29
    js正则表达式验证身份证号和密码
    assertThat用法
    java产生随机数的几种方式
    jQuery之Deferred对象详解
  • 原文地址:https://www.cnblogs.com/Qinmp-Blog/p/5294479.html
Copyright © 2011-2022 走看看