問候所有,我想知道是否有人可以提供某種解釋或確認我的猜測。使用JRE -Xms300m將執行時間縮短一半?
我有一個for循環程序執行了幾百次,每次添加數字到ArrayLists的選擇。對於爲什麼要花費這麼長時間來執行我進一步調查感到困惑。
事實證明,如果我有
(for int i =0; i < 50000; i++)
這將需要近一倍這將需要時間,如果我有
(for int i=0; i < 40000; i++)
增加i
超過50000甚至高達100000居然沒需要很多額外的時間。剛剛在40000和50000之間的某個地方跳了大跳
把我的思考放在頭上,我猜想可能是因爲某個地方的內存不足而導致內存不足的問題?並且需要更多的記憶,儘管我不確定爲什麼會這麼長時間。
無論如何,我發現通過添加JRE參數-Xms300m它解決了這個問題。我認爲這是以300mb的堆大小啓動程序,因此否定了稍後分配額外堆空間的需要。
我還不明白的是,我爲arrayLists創建了足夠多的內存。我認爲這個問題會在我分配堆的內存時發生,而不是當我使用.add()方法時。
new ArrayList<Integer>(5000);
只是出於好奇,會發生什麼,如果在運行循環之前調用ArrayList.ensureCapacity(INT),預留足夠的內存用於所有的數字前面? – vanza 2010-10-24 00:27:33