Java無意識自動裝箱嚴重消耗效能

沉默王二發表於2015-07-11
版權宣告:歡迎轉載,請註明沉默王二原創。 https://blog.csdn.net/qing_gee/article/details/46842341

Java 無意識自動裝箱嚴重消耗效能。

根據《effective java》書中所寫,我測試了以下的簡單例子。

package com.mwq.number;

public class Test {

    public static void main(String[] args) {
        long time1 = System.currentTimeMillis();

        long sum = 0L;
        for (int i = 0; i < Integer.MAX_VALUE / 2; i++) {
            sum += i;
        }

        System.out.println(sum);

        long time2 = System.currentTimeMillis();

        System.out.println(time2 - time1);

        Long sum1 = 0L;
        for (int i = 0; i < Integer.MAX_VALUE / 2; i++) {
            sum1 += i;
        }

        System.out.println(sum);

        long time3 = System.currentTimeMillis();

        System.out.println(time3 - time2);
    }

}

例子很簡單,看看Long和long在+i的時候到底有多大的區別,花費的時間是如何的。

看結果,由於我電腦計算0到Integer.MAX_VALUE 的運算速度太慢,所以就只取了一半的量。

576460750692810753
1903
576460750692810753
10939

差了一個數量級!!!!!!!!!

sum在被宣告為Long而不是long的時候,就會創造N(具體多少個N,我還真不知道,書中說的是2的31次方,顯然我的不是)多個Long例項!

總結:自動裝箱發生的太頻繁的話,嚴重消耗效能。


相關文章