easyexcel icon indicating copy to clipboard operation
easyexcel copied to clipboard

easyexcle从3.1.1升级到4.0.3,jdk从8升级到jdk21,使用fillData()应用出现OOM

Open 9199 opened this issue 1 year ago • 1 comments

异常代码

   try (ExcelWriter excelWriter = EasyExcel
                .write(this.resultFilePath)
                .withTemplate(templateFilePath)
                .excelType(ExcelTypeEnum.XLSX)
                .build()) {
            WriteSheet build = EasyExcel.writerSheet(0).build();
            List<RecruitmentMonthlyRecordsFillData> data = fillData(endDate);
            excelWriter.fill(data, build);
        }

问题描述

代码如上所示 jdk8 -> jdk21 springboot2.7.8 -> springboot3.2.8 easyexcel3.1.1 -> 4.0.3

通过Arthas分析发现,在最后的com/alibaba/excel/ExcelWriter.close方法中,占用了大量内存。 继续向下分析发现 org/apache/poi/xssf/streaming/SXSSFWorkbook.copyStreamAndInjectWorksheet方法是性能损耗最大的地方

依赖版本如下:

image

内存火焰图如下:

jdk21+springboot3.2.8+easyexcel4.0.3版本中 火焰图如下: image

jdk1.8+springboot2.7.8+easyexcel4.0.3版本中 火焰图如下: image

相同的版本,相同的代码,jdk和springboot的版本不同,两张火焰图里面的close方法差别很大

9199 avatar Oct 17 '24 06:10 9199

@zhuangjiaju 复现成功,EasyExcel 版本 4.0.3 JDK21

image

image

Suomm avatar Nov 02 '24 10:11 Suomm