颓废冷云 2016-04-20 05:49 采纳率: 0%
浏览 4517

java 使用POI导出大数据,服务器内存不释放

RT,我用java 使用POI导出大数据,
数据是可以导出来。但是服务器的内存一直不释放。导一次 内存就会增加100M-2G 视数据量大小。当超过JVM设置的15G时,服务就会瘫痪掉,无法访问、
主要代码如下,

 MapList list  = db.query(SQL);
        String EXCELNAME = (new StringBuilder(String.valueOf(unitId))).toString();
         HSSFWorkbook workbook = new HSSFWorkbook();
            //createSheet(excel工作表名)
            HSSFSheet sheet = workbook.createSheet(EXCELNAME);
            //下面是设置excel表中标题的样式
            HSSFCellStyle title_style = workbook.createCellStyle();
            title_style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
            title_style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
            title_style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
            title_style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
            title_style.setBorderRight(HSSFCellStyle.BORDER_THIN);
            title_style.setBorderTop(HSSFCellStyle.BORDER_THIN);
            title_style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
            HSSFFont title_font = workbook.createFont();
            title_font.setColor(HSSFColor.VIOLET.index);
            title_font.setFontHeightInPoints((short) 12);
            title_font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
            title_style.setFont(title_font);
            //内容的样式
            HSSFCellStyle content_style = workbook.createCellStyle();
            content_style.setFillForegroundColor(HSSFColor.LIGHT_YELLOW.index);
            content_style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
            content_style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
            content_style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
            content_style.setBorderRight(HSSFCellStyle.BORDER_THIN);
            content_style.setBorderTop(HSSFCellStyle.BORDER_THIN);
            content_style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
            content_style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
            HSSFFont content_font = workbook.createFont();
            content_font.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
            content_style.setFont(content_font);
            //填充标题内容
            HSSFRow row = sheet.createRow(0);
            for (int i = 0; i < TITLES.length; i++) {
                //设置标题的宽度自适应
                sheet.setColumnWidth(i, TITLES[i].getBytes().length * 2 * 256);
                HSSFCell cell = row.createCell(i);
                cell.setCellStyle(title_style);
                HSSFRichTextString text = new HSSFRichTextString(TITLES[i]);
                cell.setCellValue(text);
            }
               for (int i = 0; i < list.size(); i++) {
                   row = sheet.createRow( i + 1);  
                   for( int val=0;val<TITLES.length;val++){
                       HSSFCell cell = row.createCell(val);
                        cell.setCellStyle(content_style);
                        HSSFRichTextString richString = new HSSFRichTextString(list.getRow(i).get(val));
                        cell.setCellValue(richString);
                   }
           }
            response.reset();
            response.setContentType("application/vnd.ms-excel ;charset=" + 
                      LocaleConfig.getEncoding());
            response.setHeader("Content-disposition", "attachment;filename="
                  +EXCELNAME   + ".xls");
            response.addHeader("Cache-Control", "no-cache");
            response.addHeader("Cache-Control", "no-store");
            OutputStream ouputStream = response.getOutputStream();
            try {
                workbook.write(ouputStream);
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                    if(ouputStream!=null){
                         ouputStream.flush();
                         ouputStream.close();
                    }

            }
    }
  • 写回答

3条回答 默认 最新

  • 雪落.struggle 2022-04-14 19:09
    关注

    你好,我也遇到这个问题了,百度不到,请问现在解决了吗?是怎样解决的

    评论

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?