跨境电商网站建设流程图,照片制作软件免费,网站建设的需求要素,自己做的网站怎么添加文档问题在Java里绝大多数都是使用POI进行导入导出Excel#xff0c;正常情况下也都没有问题。但当导出的数据量比较大时#xff0c;我留意到我本机当数据量达到两三万条(二十个列)时#xff0c;就会出现内存溢出#xff0c;CPU飙升到95%以上的情况。可能换到好点的服务器上会好…问题在Java里绝大多数都是使用POI进行导入导出Excel正常情况下也都没有问题。但当导出的数据量比较大时我留意到我本机当数据量达到两三万条(二十个列)时就会出现内存溢出CPU飙升到95%以上的情况。可能换到好点的服务器上会好点但情况并不会好太多还是会存在瓶颈。解决使用 SXSSFWorkbook 类代替原来的 XSSFWorkbook 类SXSSFWorkbook 是3.8以上的POI才开始支持。SXSSFWorkbook 相对于 XSSFWorkbook 进行了一些优化SXSSFWorkbook是streaming 版本的XSSFWorkbook它只会保存最新的excel rows在内存里供查看在此之前的excel rows都会被写入到硬盘里(Windows电脑是写入到C盘根目录下的temp文件夹)。被写入到硬盘里的rows是不可见的/不可访问的。只有还保存在内存里的才可以被访问到。在数据量超过设定的值时它会用硬盘空间来大幅降低堆内存的占用在系统的临时文件夹目录创建一个临时文件然后将所有大于预设行数的数据都存入临时文件这样就降低了内存的压力从而实现以硬盘空间换取内存空间避免内存溢出和频繁GC导致的CPU飙升。注:HSSFWorkbook和XSSFWorkbook的Excel Sheet导出条数上限(2003版)是65535行、256列,(2007版)是1048576行,16384列。使用引入pom需要注意的是4.0.0版本的JDK需要1.8以上如果JDK是1.7的那么就使用3.8或者3.9版本的依赖。org.apache.poipoi-ooxml-schemas4.0.0org.apache.poipoi-ooxml4.0.0org.apache.poipoi4.0.0123456789101112131415org.apache.poipoi-ooxml-schemas4.0.0org.apache.poipoi-ooxml4.0.0org.apache.poipoi4.0.0我们要注意SXSSFWorkbook构造器有一些参数其中有一个rowAccessWindowSize代表指定的内存中缓存记录数默认为100它代表能从Sheet窗口看到多少刚才Create了多少Row超过的就都放到磁盘里了如果你设置rowAccessWindowSize为1000那么你只能看到1000条新创建的数据如果设置为-1就会看到全部创建的数据。SXSSFWorkbook workbook null;OutputStream outputStream null;try {outputStream response.getOutputStream();// 创建工作簿使用的是SXSSFWorkbookworkbook new SXSSFWorkbook(1000);// 设置数据压缩workbook.setCompressTempFiles(true);Sheet sheet workbook.createSheet(表名);Row titleRow sheet.createRow(0);Cell cell titleRow.createCell(0);cell.setCellValue(内容);// 将工作簿写入输出流workbook.write(outputStream);} catch (Exception e) {e.printStackTrace();}finally {if (workbook ! null) {// 处理掉临时文件workbook.dispose();}if (outputStream ! null) {outputStream.close();}}12345678910111213141516171819202122232425SXSSFWorkbookworkbooknull;OutputStreamoutputStreamnull;try{outputStreamresponse.getOutputStream();// 创建工作簿使用的是SXSSFWorkbookworkbooknewSXSSFWorkbook(1000);// 设置数据压缩workbook.setCompressTempFiles(true);Sheetsheetworkbook.createSheet(表名);RowtitleRowsheet.createRow(0);CellcelltitleRow.createCell(0);cell.setCellValue(内容);// 将工作簿写入输出流workbook.write(outputStream);}catch(Exceptione){e.printStackTrace();}finally{if(workbook!null){// 处理掉临时文件workbook.dispose();}if(outputStream!null){outputStream.close();}}浏览量:8740