2
大多數表示,原始的對象存儲在堆,但是,我從下面的性能測試不同的結果:對象,堆或棧中的原語?
public class Performance {
long sum = 0;
public static void main(String[] args) {
// TODO Auto-generated method stub
long startTime = System.currentTimeMillis();
long pSum = 0;
for(int i = 0; i < Integer.MAX_VALUE; i++){
pSum += i;
}
long endTime = System.currentTimeMillis();
System.out.println("time of using primitive:" + Long.toString(endTime - startTime));
System.out.println(pSum);
long startTime1 = System.currentTimeMillis();
Long Sum = 0L;
for(int i = 0; i < Integer.MAX_VALUE; i++){
Sum += i;
}
long endTime1 = System.currentTimeMillis();
System.out.println("time of using object:" + Long.toString(endTime1 - startTime1));
System.out.println(Sum);
Performance p = new Performance();
long startTime2 = System.currentTimeMillis();
for(int i = 0; i < Integer.MAX_VALUE; i++){
p.sum += i;
}
long endTime2 = System.currentTimeMillis();
System.out.println("time of using primitive in object:" + Long.toString(endTime2 - startTime2));
System.out.println(p.sum);
}
}
結果是這樣的:
time of using primitive:1454
2305843005992468481
time of using object:23870
2305843005992468481
time of using primitive in object:1529
2305843005992468481
我們可以發現在對象中使用基元和使用基元的時間幾乎相同。所以我很困惑,如果對象中的原語存儲在堆中。爲什麼在對象中使用基元和使用基元的時間成本幾乎相同?
google autoboxing,google JIT優化 – 2014-09-01 01:34:28
「原始對象存儲在堆中」是完全正確的:所有*對象*都在堆中,因此它們的內容也是如此。 – EJP 2014-09-01 01:47:41
謹防從微基準中得出太多的推論。 – 2014-09-01 01:52:38