3 回答

TA貢獻(xiàn)1874條經(jīng)驗(yàn) 獲得超12個(gè)贊
慢的原因是你在對(duì)List的循環(huán)中使用了List的get函數(shù).
典型的"Shlemiel噴涂算法",所以越跑越慢啊.
List里是一個(gè)鏈表,get方法會(huì)從頭一個(gè)個(gè)地?cái)?shù),越到后面,數(shù)的時(shí)間就越長(zhǎng).所以會(huì)慢..
你應(yīng)該修改方式,用下面的方法進(jìn)行循環(huán):
for(Iterator it = list.iterator(); it.hasNext() ;){
Map map = (Map)it.next();
// ...
}

TA貢獻(xiàn)1951條經(jīng)驗(yàn) 獲得超3個(gè)贊
infoBean = new InfoBean();
我看問(wèn)題就出在這里,有20w條記錄,就創(chuàng)建了20w個(gè)對(duì)象,卻沒(méi)有及時(shí)銷(xiāo)毀!隨著創(chuàng)建的對(duì)象越來(lái)越多,內(nèi)存占用越來(lái)越大,當(dāng)然會(huì)越來(lái)越慢了.不內(nèi)存溢出算好的了

TA貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個(gè)贊
說(shuō)的不一定對(duì)啊,你可以關(guān)注一下:
個(gè)人認(rèn)為
List rows = jdbcTemplate.queryForList(SQL_select_Entry,new Object[] { 140000,0 });
infoBean = new InfoBean();
這兩條語(yǔ)句都通過(guò)new方法建立了新的對(duì)象,其中一個(gè)還是臨時(shí)對(duì)象,這要從內(nèi)存中劃分空間的,好像沒(méi)看見(jiàn)你用delete清除掉這個(gè)對(duì)象,這樣在循環(huán)了幾萬(wàn)次之后,會(huì)產(chǎn)生很多的對(duì)象實(shí)例,這或許會(huì)使程序變得很慢。java雖然設(shè)有垃圾回收機(jī)制來(lái)回收不用的空間,但是沒(méi)人知道這個(gè)機(jī)制在什么時(shí)候運(yùn)行,如果你每次new的對(duì)象沒(méi)有及時(shí)delete的話,是會(huì)影響程序性能的。而且JBuilder由于自身的原因,編譯的速度本身也比較慢。
我不知道你的程序中是不是有辦法避開(kāi)使用對(duì)象,在如此大的循環(huán)中大量使用new方法,怕是會(huì)影響性能。
添加回答
舉報(bào)