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

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

  • 相关阅读:
    Windows下Yarn安装与使用
    论文阅读Graph Convolutional Matrix Completion
    如何快速查询中科院JCR分区和汤森路透JCR分区
    Implement GAN from scratch
    PyCharm将main.py解析成text文件的解决方法
    理解PyTorch的自动微分机制
    mcast_set_if函数
    mcast_get_if函数
    mcast_unblock_source函数
    mcast_block_source函数
  • 原文地址:https://www.cnblogs.com/Qinmp-Blog/p/5294479.html
Copyright © 2011-2022 走看看