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

相关内容

热门资讯

4分钟辅助!天天手游辅助工具,... 4分钟辅助!天天手游辅助工具,好像存在有辅助脚本(有挂秘诀)1、起透看视 天天手游辅助工具辅助软件价...
7分钟辅助!微乐小程序自建房辅... 7分钟辅助!微乐小程序自建房辅助,都是有辅助方法(有人有挂)1、玩家可以在微乐小程序自建房辅助线上大...
2分钟辅助!约局吧辅助器,本来... 2分钟辅助!约局吧辅助器,本来真的有辅助插件(的确有挂)1、约局吧辅助器破解器简单,约局吧辅助器机器...
三分钟辅助!微乐自建房辅助工具... 三分钟辅助!微乐自建房辅助工具,确实有辅助挂(存在有挂)1、很好的工具软件,可以解锁游戏的微乐自建房...
8分钟辅助!巴郎新疆开挂,一直... 8分钟辅助!巴郎新疆开挂,一直有辅助工具(有挂详情)1、巴郎新疆开挂透视辅助软件激活码多个强度级别选...
五分钟辅助!温州茶苑手机辅助器... 五分钟辅助!温州茶苑手机辅助器,好像真的有辅助软件(有挂技巧)1、每一步都需要思考,不同水平的挑战温...
两分钟辅助!白金岛手游的作弊码... 两分钟辅助!白金岛手游的作弊码,其实真的是有辅助挂(有挂细节)1、白金岛手游的作弊码免费辅助多个强度...
八分钟辅助!极速暗宝辅助,一贯... 八分钟辅助!极速暗宝辅助,一贯真的有辅助技巧(有挂神器)1、许多玩家不知道极速暗宝辅助辅助怎么退出观...
一分钟辅助!创乐源辅助软件,果... 一分钟辅助!创乐源辅助软件,果然有辅助工具(有挂讲解)1、一分钟辅助!创乐源辅助软件,果然有辅助工具...
8分钟辅助!微乐自建房辅助多少... 8分钟辅助!微乐自建房辅助多少钱一个月,真是真的是有辅助工具(有挂讲解)小薇(辅助器软件下载)致您一...