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

相关内容

热门资讯

八分钟办法!樱花之盛辅助器,西... 八分钟办法!樱花之盛辅助器,西兵互娱辅助多少钱(辅助)好像是真的插件(哔哩哔哩)小薇(辅助器软件下载...
教程辅助挂!渝都亲友全辅助,w... 教程辅助挂!渝都亲友全辅助,werplan怎么透视(透视)开挂辅助软件(哔哩哔哩)1、这是跨平台的渝...
透视教程书!约局吧德州真的有透... 透视教程书!约局吧德州真的有透视挂吗,情怀辅助哪里可以装(辅助)果然真的有插件(哔哩哔哩)1、起透看...
4分钟操作!斗棋辅助脚本视频,... 4分钟操作!斗棋辅助脚本视频,新天道怎么看底牌(辅助)确实真的是有下载(哔哩哔哩);1、下载好新天道...
截至发稿!鱼虾蟹控制器辅助器开... 截至发稿!鱼虾蟹控制器辅助器开挂,pokermaster脚本(透视)开挂辅助攻略(哔哩哔哩)1、该软...
透视学习!pokemmo手机版... 透视学习!pokemmo手机版脚本免费,微信小程序辅助软件有哪些(辅助)确实真的是有神器(哔哩哔哩)...
第9分钟总结!斗棋联盟辅助,卡... 第9分钟总结!斗棋联盟辅助,卡农血拼辅助(辅助)一贯是有下载(哔哩哔哩)1、完成卡农血拼辅助有辅助插...
黑科技插件!台州哈狗有辅助软件... 黑科技插件!台州哈狗有辅助软件吗,拱趴大菠萝挂怎么安装(透视)开挂辅助app(哔哩哔哩)1、不需要A...
透视手册!智星德州插件怎么下载... 透视手册!智星德州插件怎么下载,天天贵阳破解版(辅助)原来真的是有教程(哔哩哔哩)1、下载好天天贵阳...
一分钟手段!宝宝吃吃吃怎么开挂... 一分钟手段!宝宝吃吃吃怎么开挂,新道游辅助器免费下载(辅助)果然真的有软件(哔哩哔哩);一、新道游辅...