JAVA Excel导入导出技术选型(Apache POI、EasyPoi、EasyExcel)
创始人
2024-11-11 19:06:23
0

JAVA Excel导入导出技术选型(Apache POI、EasyPoi、EasyExcel)

    • 一、Apache POI 简介
    • 二、EasyPOI简介
    • 三、EasyExcel简介
      • 四、EasyPOI测试结果
      • 五、EasyExcel测试结果
    • 总结:
          • 单个线程测试结果
            • 10个线程测试结果

Apache POI、EasyPoi、EasyExcel对比使用


一、Apache POI 简介

是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office(Excel、WORD、PowerPoint、Visio等)格式档案读和写的功能。

Apache POI是java原生的,可以精细到对每个表单,每个单元格进行操作,封装度较低,使用起来需写大量的代码,并且性能较低,可以入门使用,这里不详细介绍。

EasyPoi和EasyExcel都是基于Apache POI进行二次开发的,都做了封装处理使用起来很方便。

官方文档为英文,这里放个使用范例:

Apache POI使用详解monday的博客-CSDN博客apachepoi

二、EasyPOI简介

Easypoi 为谁而开发

  • 不太熟悉poi的

  • 不想写太多重复太多的

  • 只是简单的导入导出的

  • 喜欢使用模板的

  • 基于注解的导入导出,修改注解就可以修改Excel

官方文档:

1.1 介绍

三、EasyExcel简介

EasyExcel是阿里巴巴开源的一款 excel 解析工具,是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。 github地址:https://github.com/alibaba/easyexcel

官方文档:

EasyExcel · 语雀

单就代码简洁度来说,EasyPOI和EasyExcel封装度都比较高,使用起来非常方便,可以不写工具类直接调用,但两者的性能和内存消耗有着大的差异,接下来说下实际测试结果:

环境:Xms512m -Xmx512m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=logs -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:logs/Gc.log,即最大堆内存512mb,打印过程中的Gc日志以及堆内存溢出报错,数据量65535条数据(Apache POI支持的最大数据,EasyPOI和EasyExcel没有限制),每条数据5个字段(字段长度为UUID字符串),使用apache-jmeter进行压力测试,分别用1个线程和10个线程测试两者的性能,使用JDK自带程序jvisualvm.exe观察项目堆内存的变化以及单个线程(即一次请求)的内存消耗。

四、EasyPOI测试结果

  • 单个线程测试:

单次请求使用总内存为714Mb,期间发生几次Young GC和一次Full GC,服务正常运行,导出一次所需时间为4秒钟。

  • 10个线程同时请求:

服务崩溃,系统出现内存溢出java.lang.OutOfMemoryError: GC overhead limit exceeded,在降低数据级后测试,发现在10个线程同时请求导出3万条数据已经发生内存溢出错误,1万条压力可以承受。

五、EasyExcel测试结果

  • 单个线程测试:

可见每次使用的总内存量为1.6Gb,比EasyPOI要大,系统查看Gc日志发生几次Young GC,没有Full GC,导出一次所需时间为2秒钟。

  • 10个线程同时请求:

服务停滞很久,查看Gc日志发现服务一直在频繁进行Full Gc,在20秒过后导出成功,服务没有崩溃,可见虽然EasyExcel单个线程使用内存总量比较多,但内存使用后及时释放,没有导致堆内存溢出,由于系统发生Full Gc期间JVM处于停顿状态,所以导出时间较长,在20秒左右导出成功。

实测在8万条左右也发生了堆内存溢出java.lang.OutOfMemoryError: GC overhead limit exceeded,可见EasyExcel虽然内存占用少,但也有上限,相对于EasyPOI对内存控制的更好。

总结:

单个线程测试结果
技术栈线程内存增量服务状态导出所需时间Young Gc次数Full Gc次数
EasyPOI714MB正常平均2.5s10次偶发1次
EasyExcel1.6GB正常平均2s12次0次
10个线程测试结果
技术栈线程内存增量服务状态导出所需时间Full Gc次数
EasyPOI平均每个线程700MBOutOfMemoryError-/-多次Full Gc后崩溃
EasyExcel平均每个线程 1.6GB卡顿一段时间正常运行平均16s频繁进行Full GcJAVA Excel导入导出技术选型

综上:就导出效率来说EasyPoi和EasyExcel相差不大,但内存消耗和系统稳定性EasyExcel更好,更加推荐使用。

版权声明:本文为博主原创文章,转载请附上原文出处链接
https://blog.csdn.net/chang_mao/article/details/135956470?spm=1001.2014.3001.5501

相关内容

热门资讯

规律教程!xpoker辅助助手... 规律教程!xpoker辅助助手德州辅助app官方最新版本介绍下载(果真真的有挂)1、每一步都需要思考...
详细教程!!wpk私人辅助德扑... 详细教程!!wpk私人辅助德扑之星透视软件(一直真的有挂)1、下载好wpk私人辅助辅助软件之后点击打...
教你教程!cloudpoker... 教你教程!cloudpoker外挂WePOKer有没有透视方法(一般真的有挂)1、cloudpoke...
专业教程!wejoker黑侠辅... 专业教程!wejoker黑侠辅助器HHpoker可以开挂吗(一贯真的有挂);进入游戏-大厅左侧-新手...
透牌教程!哈糖大菠萝辅助器we... 透牌教程!哈糖大菠萝辅助器wepoker到底能不能透视(都是真的有挂);1、首先打开哈糖大菠萝辅助器...
2025新版技巧!wpk模拟器... 2025新版技巧!wpk模拟器是什么天天畅玩德州有挂吗(好像真的有挂);1、首先打开wpk模拟器是什...
新版2025教程!wepoke... 新版2025教程!wepoker有没有透视方法wpk德州辅助(的确是有挂的)1、点击下载安装,wep...
扑克教程!!impoker辅助... 扑克教程!!impoker辅助wepoker私人局作弊开挂方法(其实真的有挂);一、impoker辅...
wpk教程!pokemmo脚本... wpk教程!pokemmo脚本手机版wepoker德州开挂辅助方法(的确是有挂的)1、构建自己的po...
攻略教程!!菠萝辅助器免费版的... 攻略教程!!菠萝辅助器免费版的功能介绍德州大菠萝摆牌攻略(一贯真的有挂)1)菠萝辅助器免费版的功能介...