首页 > 其他分享 >XSSFWorkbook转换SXSSFWorkbook对象使用,避免OOM

XSSFWorkbook转换SXSSFWorkbook对象使用,避免OOM

时间:2024-12-09 18:54:35浏览次数:4  
标签:OOM excel SXSSFWorkbook 内存 new XSSFWorkbook

XSSFWorkbook转换SXSSFWorkbook对象使用,避免OOM

目前excel的导入导出功能,大部分是基于apache的POI技术,而POI给我们提供了WorkBook接口。
常用的WorkBook接口实现有三种:
HSSFWorkbook:它是早期使用最多的工具,支持Excel2003以前的版本,Excel的扩展名是.xls。只能导出65535条数据,如果超过最大记录条数会报错,但不会出现内存溢出。
XSSFWorkbook:它可以操作Excel2003-Excel2007之间的版本,Excel的扩展名是.xlsx。最多可以导出104w条数据,会创建大量的对象存放到内存中,可能会导致内存溢出。
SXSSFWorkbook:它可以操作Excel2007之后的所有版本,Excel的扩展名是.xlsx。SXSSFWorkbook是streaming版本的XSSFWorkbook,它只会保存最新的rows在内存里供查看,以前的rows都会被写入到硬盘里。用磁盘空间换内存空间,不会导致内存溢出。

引起OOM问题的功能,刚好使用了XSSFWorkbook处理excel,一次性创建了大量的对象。

XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(file));
XSSFSheet sheet = wb.getSheetAt(0);

既然XSSFWorkbook在导入导出大excel文件时,会导致内存溢出。那么,我们改成SXSSFWorkbook就行

XSSFWorkbook转换SXSSFWorkbook:
XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(file));
SXSSFWorkbook swb = new SXSSFWorkbook(wb,100);
SXSSFSheet sheet = (SXSSFSheet) swb.createSheet("sheet1");

使用SXSSFWorkbook将XSSFWorkbook封装了一层,其中100表示excel一次读入内存的最大记录条数,excel中其余的数据将会生成临时文件保存到磁盘上。这个参数,可以根据实际需要调整。
sheet.flushRows();

此外,顺便说一句,在使用WorkBook接口的相关实现类时,用完之后,要记得调用close方法及时关闭,不然也可能会出现OOM问题。

MAT内存分析工具,此外,使用阿里的arthas也可以定位线上OOM问题。


扩展:阿里开源的EasyExcel解决OOM的问题。

标签:OOM,excel,SXSSFWorkbook,内存,new,XSSFWorkbook
From: https://www.cnblogs.com/oktokeep/p/18595818

相关文章

  • Linux OOM
    OOM是什么为什么会发生OOMOOM(OutofMemory)错误发生在系统内存耗尽时,无法为新的进程或现有进程分配足够的内存。具体原因包括:内存泄漏:程序在运行过程中申请了内存但没有正确释放,导致内存逐渐耗尽。内存使用过大:某些程序或进程在某一时刻申请了过多的内存,超过了系统的实......
  • INS风格户外风光旅拍人像自拍摄影Lr调色教程,手机滤镜PS+Lightroom预设下载!
    调色教程户外风光旅拍人像自拍摄影结合Lightroom调色,可以打造出令人惊艳的视觉效果。这种风格将自然风光与人像完美融合,强调色彩的和谐与氛围感的营造。预设信息调色风格:INS风格预设适合类型:人像,户外,旅拍,自拍,特写等预设格式:XMP+DNG手机滤镜资源编号:00792支持软件:Lightroo......
  • 人文街头纪实摄影电影胶片风格Lr调色教程,手机滤镜PS+Lightroom预设下载!
    调色教程   人文街头纪实摄影电影胶片风格通过Lightroom调色可以呈现出独特的魅力。这种风格将街头的人文瞬间定格,仿佛把观众带回到过去的时光。电影胶片风格的调色注重色彩的浓郁度和质感的营造。在色彩方面,常常运用暖黄、棕褐等复古色调,给人一种温暖而怀旧的感觉。......
  • 开源自己设计的ESP32-C3-WROOM核心板
    设计了一款ESP32-C3-WROOM核心板,开源出来。原理图、PCB、手册什么的打包好了,开源到了立创开源广场,复制下面链接可以直达,也可以关注我的同名公众号"折途想要敲代码"私信回复“ESP32C3”即可免费下载。ESP32C3WROOM-立创开源硬件平台ESP32-C3-WROOM核心板https://oshwhub.co......
  • 记录一次线上服务OOM.md
    记录一次线上服务OOMMAT下载https://archive.eclipse.org/mat/选择对应平台以及对应系统架构进行下载。启动的时候记得修改MemoryAnalyzer.ini中堆内存默认是1g修改成大于要分析的dump文件大小。注意事项看看自己服务器jdk版本。需要工具可以评论私发给你们MemoryAn......
  • 数据集-目标检测系列- 拖把,扫把 检测数据集 mops brooms>> DataBall
    数据集-目标检测系列-拖把,扫把检测数据集mopsbrooms>>DataBallDataBall助力快速掌握数据集的信息和使用方式,会员享有百种数据集,持续增加中。 需要更多数据资源和技术解决方案,知识星球:“DataBall-X数据球(free)”贵在坚持!数据样例项目地址:*相关项目1)数据......
  • ChatRoom pg walkthrough Intermediate
    NMAP┌──(root㉿kali)-[~/lab]└─#nmap-p--A192.168.189.110StartingNmap7.94SVN(https://nmap.org)at2024-11-3000:22UTCNmapscanreportfor192.168.189.110Hostisup(0.073slatency).Notshown:65533filteredtcpports(no-response)PORTST......
  • 【LRC】Adobe Lightroom Classic软件下载安装与使用
    目录AdobeLightroomClassic软件简介一、软件简介1.1软件特点1.2适用人群1.3主要功能二、系统要求2.1硬件要求2.2操作系统要求2.3显示要求三、下载安装步骤3.1下载安装包3.2安装AdobeLightroomClassic软件简介AdobeLightroomClassic(简称LRC)是一款......
  • 【大模型实战篇】利用TensorRT LLM部署及推理大模型实战(bloom560m、chatglm-6b等大模
    1. TensorRT-LLM基础介绍        TensorRT-LLM是NVIDIA用于做LLM(LargeLanguageModel)的可扩展推理方案。基于TensorRT深度学习编译框架来构建、编译并执行计算图,并借鉴了许多FastTransformer中高效的Kernels实现,然后利用NCCL完成设备之间的通讯。Tenso......
  • RTSP播放器EasyPlayer.js播放器关于报“RuntimeError: abort(OOM). Build with -s ASS
    随着互联网技术的不断进步,HTML5逐渐取代了传统的HTML4,成为现代网站开发不可或缺的一部分。HTML5不仅简化了标记语言的复杂度,还引入了许多新的API和元素,极大地丰富了网页的表现力。特别是在多媒体领域,HTML5提供了原生支持音频和视频播放的功能,使得开发者无需依赖第三方插件如Flash,......