2012-12-03 48 views
0

我們知道對象大小取決於其字段類型。但是,對象實例化時間取決於它的字段類型嗎?見我的測試對象實例化時間取決於它的大小嗎?

public class Test { 
    byte f1; 
    byte f2; 
    byte f3; 
    byte f4; 
    byte f5; 
    byte f6; 
    byte f7; 
    byte f8; 
    byte f9; 
    byte f10; 

    public static void main(String[] args) { 
     int n = 1000000; 
     Test[] a = new Test[n]; 
     long t0 = System.currentTimeMillis(); 
     for(int i = 0; i < n; i++) { 
      a[i] = new Test(); 
     } 
     System.out.println(System.currentTimeMillis() - t0); 
    } 
} 

也許不是一流的,還是讓我對不同的字段類型而穩定的結果:

byte - 125 ms 
int - 250 ms 
long - 370 ms 

這是爲什麼?我在筆記本上使用Eclipse(賽揚925)運行它,它需要-Xmx1024M。

+0

你有什麼問題嗎?較大的類型會讓您的運行時間變慢。什麼是意外? –

+0

我的問題是爲什麼更大的類型實例化更長的時間 –

+1

因爲,即使假設內存分配時間不變(可能不是這種情況),您仍然需要將所有內存設置爲0,並且將更多內存設置爲0需要更長的時間。 –

回答

0

更大類型將需要更多的時間作爲OS具有的存儲器搜索合適的量在HEAP以適合該類型。所以類型越大,一般需要更多的時間。

大部分時間對象實例化時間成正比的領域類型

+0

也如果你的內存被碎片化,那麼所需的時間可能會超過正常 –

+1

這是實現的細節,但它肯定需要更長的時間來設置長爲0,然後是一個字節。 –