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

相关内容

热门资讯

透视黑科技!aapoker透视... WePoker透视辅助工具核心要点解析‌,透视黑科技!aapoker透视作弊挂教程,wepoker俱...
wpk透视辅助工具!wepow... wpk透视辅助工具!wepower有外挂(透视)总是存在有挂(详细辅助一分钟了解)是一款可以让一直输...
aapoker免费透视脚本!s... aapoker免费透视脚本!steampokermaster辅助(透视)本来真的是有挂(大神讲解)所...
透视肯定!HHpoker有挂吗... HHpoker有挂吗新手教程相关信息汇总(需添加指定Q群1067239143获取下载链接);透视肯定...
智星德州菠萝偷偷看牌功能!we... 智星德州菠萝偷偷看牌功能!wepoke辅助机器人(透视)素来有挂(详细辅助玩家必备科普)1、下载好智...
透视辅助!德扑之星辅助作弊挂,... 透视辅助!德扑之星辅助作弊挂,德扑之星辅助透视教程(详细辅助技巧教程)关于德扑之星辅助透视教程机制的...
红龙poker透视!epoke... 红龙poker透视!epoker免费透视脚本(透视)真是是真的有挂(教你攻略)1、不需要AI权限,帮...
德州AI智能辅助机器人!aap... 德州AI智能辅助机器人!aapoker有挂(透视)从来存在有挂(详细辅助玩家攻略推荐)1、完成德州A...
透视软件!fishpoker透... 大家肯定在之前fishpoker透视辅助器官网入口或者fishpoker透视辅助器官网入口中玩过透视...
hhpoker透视脚本!wep... hhpoker透视脚本!wepoker破解器激活码(透视)竟然是有挂(分享教程)一、wepoker破...