2013-02-01 36 views
5

爲什麼爲什麼時間初始化數組不同

 long t = System.currentTimeMillis(); 
     int size = 3333333; 
     int[][][] arr = new int[size][6][2]; 
//  int[][][] arr= new int[2][6][size]; 
     pr(System.currentTimeMillis() - t); 

打印​​ 但

 long t = System.currentTimeMillis(); 
     int size = 3333333; 
//  int[][][] arr = new int[size][6][2]; 
     int[][][] arr= new int[2][6][size]; 
     pr(System.currentTimeMillis() - t); 

打印44 ms

解決方法二115時間快

+1

你如何運行這段代碼?你可以發佈整個方法嗎?你有多少次運行它們?你跑了多少個初始週期?基準測試Java操作不是一件小事... – ppeterka

+1

請參閱:http://stackoverflow.com/questions/504103/how-do-i-write-a-correct-micro-benchmark-in-java - 您的方式這樣做不可能產生任何有意義的結果。 –

回答

6

這是simplier測試int[][]

int[][] arr = new int[size][2]; 

在這種情況下,您必須分配size塊大小爲16字節的內存。

在這種情況下

int[][] arr = new int[2][size]; 

你只撥出2塊大小* 8個字節的內存。

而分配是昂貴的操作。

+1

快115倍?我認爲這是一個與JVM初始化相關的問題,並且初始化優化過程... – ppeterka

+0

在第一個示例中有或沒有優化,您必須存儲許多對象(數組),並將它們全部分配到堆中,第二個示例中只有2個對象 – dilix

+1

我必須承認,你是對的。我在它周圍創建了一個小的,適當的基準,結果(大致)是相同的。我認爲是時候對它進行一些研究了...... – ppeterka

相關問題