java 程序 慢_java – 为什么我的程序越来越慢?

我正在使用该程序将数据从数据库发送到Excel文件.

它在开始时工作正常然后变得越来越慢,最后它耗尽了内存并出现以下错误:“

java.lang.OutOfMemoryError:

Java堆空间……”.

可以通过添加jvm堆sapce来解决这个问题.但问题是它花了太多时间来运行程序.

几分钟后,它完成一个4秒的循环,可以在开始时0.5秒完成.我无法找到一个解决方案,使它始终以一定的速度运行.

这是我的代码问题吗?

这有什么线索吗?

这是代码:

public void addAnswerRow(List finalUsersList,WritableWorkbook book){

if (finalUsersList.size() >0 ) {

try {

WritableSheet sheet = book.createSheet("Answer", 0);

int colCount = 0;

sheet.addCell(new Label(colCount++,0,"Number"));

sheet.addCell(new Label(colCount++,0,"SchoolNumber"));

sheet.addCell(new Label(colCount++,0,"District"));

sheet.addCell(new Label(colCount++,0,"SchoolName"));

sheet.setColumnView(1, 15);

sheet.setColumnView(3, 25);

List elementsList = this.elementsManager.getObjectElementsByEduTypeAndQuestionnaireType(finalUsersList.get(0).getEducationType().getId(), this.getQuestionnaireByFinalUsersType(finalUsersList.get(0).getFinalUsersType().getId()));

Collections.sort(elementsList, new Comparator(){

public int compare(Elements o1, Elements o2) {

for(int i=0; i< ( o1.getItemNO().length()>o2.getItemNO().length()? o2.getItemNO().length(): o1.getItemNO().length());i++){

if (CommonFun.isNumberic(o1.getItemNO().substring(0, o1.getItemNO().length()>3? 4: o1.getItemNO().length()-1)) && !CommonFun.isNumberic(o2.getItemNO().substring(0, o2.getItemNO().length()>3? 4: o2.getItemNO().length()-1))){

return 1;

}

if (!CommonFun.isNumberic(o1.getItemNO().substring(0, o1.getItemNO().length()>3? 4: o1.getItemNO().length()-1)) && CommonFun.isNumberic(o2.getItemNO().substring(0,o2.getItemNO().length()>3? 4:o2.getItemNO().length()-1))){

return -1;

}

if ( o1.getItemNO().charAt(i)!=o2.getItemNO().charAt(i) ){

return o1.getItemNO().charAt(i)-o2.getItemNO().charAt(i);

}

}

return o1.getItemNO().length()> o2.getItemNO().length()? 1:-1;

}});

for (Elements elements : elementsList){

sheet.addCell(new Label(colCount++,0,this.getTitlePre(finalUsersList.get(0).getFinalUsersType().getId(), finalUsersList.get(0).getEducationType().getId())+elements.getItemNO()+elements.getItem().getStem()));

}

int sheetRowCount =1;

int sheetColCount =0;

for(FinalUsers finalUsers : finalUsersList){

sheetColCount =0;

sheet.addCell(new Label(sheetColCount++,sheetRowCount,String.valueOf(sheetRowCount)));

sheet.addCell(new Label(sheetColCount++,sheetRowCount,finalUsers.getSchool().getSchoolNumber()));

sheet.addCell(new Label(sheetColCount++,sheetRowCount,finalUsers.getSchool().getDistrict().getDistrictNumber().toString().trim()));

sheet.addCell(new Label(sheetColCount++,sheetRowCount,finalUsers.getSchool().getName()));

List answerLogList = this.answerLogManager.getAnswerLogByFinalUsers(finalUsers.getId());

Map answerMap = new HashMap();

for(AnswerLog answerLog :answerLogList ){

if (answerLog.getOptionsId() != null)

{

answerMap.put(answerLog.getElement().getItemNO(), this.getOptionsAnswer(answerLog.getOptionsId()));

}else if (answerLog.getBlanks()!= null){

answerMap.put(answerLog.getElement().getItemNO(), answerLog.getBlanks());

}else{

answerMap.put(answerLog.getElement().getItemNO(), answerLog.getSubjectiveItemContent());

}

}

for (Elements elements : elementsList){

sheet.addCell(new Label(sheetColCount++,sheetRowCount,null==answerMap.get(elements.getItemNO())?"0":answerMap.get(elements.getItemNO())));

}

sheetRowCount++;

}

book.write();

book.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (RowsExceededException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (WriteException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值