Java POI (4)—— Linux环境下文件解析过程出现OOM的问题

news2024/11/17 21:35:22

        Excel文件在进行解析的时候,在Windows环境中,没用报错,但是在Linux环境中,出现了如下的报错: nested exception is javalang.OutofMemoryError: Java heap space (OOM)

 一、内存溢出和栈溢出有什么区别:

        OOM (Out of Memory) 和栈溢出 (Stack Overflow) 都是与内存相关的问题,但是发生的原因和影响略有不同。

        OOM 是指程序在执行过程中,申请的内存超过了系统可用的物理内存和虚拟内存总和,导致系统无法继续为程序分配所需的内存空间,从而导致程序异常终止或系统崩溃。这通常是由于程序占用的内存超过了系统的限制,或者程序存在内存泄漏的问题。

        栈溢出则是在程序执行过程中,函数调用栈中的栈帧数量超过了栈的最大限制或者栈空间不足,导致栈无法容纳更多的函数调用栈帧。栈是一种有限的数据结构,当函数调用过程中层层嵌套调用的栈帧过多时,栈的容量可能会耗尽,导致栈溢出。一般情况下,栈溢出是由于递归调用没有正确结束或者函数调用嵌套层数过多导致的。

        总结起来,OOM 是程序请求的内存超出系统可用内存限制,而栈溢出是由于函数调用栈空间耗尽或调用嵌套层数过多。OOM 导致整个程序或系统崩溃,而栈溢出通常只会导致当前函数执行异常或程序终止。解决 OOM 的方法通常是优化程序的内存使用和管理,而解决栈溢出需要检查和修复递归和函数嵌套问题。

二、解决思路和方法

        网上关于出现java.lang.OutOfMemoryError的最常见原因主要说法是:

  • Java堆空间错误很简单—您试图将占用内容很大的应用程序放入相对小的Java堆空间中。也就是说,应用程序只是需要比正常运行所需的更多的Java堆空间。
  • 由编程错误引起的
    数据量的峰值:应用程序的设计目的是处理一定数量的用户或一定数量的数据。当用户数量或数据量突然激增并超过预期阈值时,在峰值之前正常运行的操作将停止操作并触发java.lang.OutOfMemoryError: Java堆空间错误。
    内存泄漏:特定类型的编程错误会导致应用程序不断消耗更多内存。每次使用应用程序的泄漏功能时,都会将一些对象留在Java堆空间中。随着时间的推移,泄漏的对象将消耗所有可用的Java堆空间,并触发已经熟悉的java.lang.OutOfMemoryError: Java堆空间错误。(内存泄露是指在程序运行过程中,分配的内存没有被正确地释放或回收,导致这些内存无法再被使用,最终导致系统的可用内存逐渐减少。这种情况下,程序会占用越来越多的内存资源,直到耗尽系统的内存资源,进程可能会变得非常缓慢或崩溃。内存泄露通常发生在程序中使用动态内存分配的情况下,例如在程序中使用 new 或 malloc 分配内存空间,但忘记释放或回收这些内存空间。内存泄露可能导致程序出现不可预测的行为,例如程序崩溃、死锁或系统资源耗尽等问题。为了避免内存泄露,开发者应该养成良好的内存管理习惯,确保在使用完内存后进行释放或回收。例如,在使用 new 或 malloc 分配内存后,应该及时使用 delete 或 free 函数释放该内存。同时,使用智能指针等内存管理工具也可以帮助自动管理内存资源的释放。)

        其实也不用想太多,按照第一种思路方式来解决。没用内存,那就给内存,在win环境中可以运行,那就说明win中的IDEA运行内存肯定比Linux的内存大,于是我将Linux的内存又扩大一个G后再运行,发现程序正常可以了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/711447.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

主流特征工程平台(一)

一. 目标 对于Feature Store的能力与边界,每家的定义略微不同,《Feature Stores - A Hierarchy of Needs》)这篇文章做了很好的总结,大体分为如下几个层次: 特征管理:特征抽取、处理、存储、元数据管理&am…

群晖NAS 安装 MySQL 远程访问连接

目录 1. 安装Mysql 2. 安装phpMyAdmin 3. 修改User 表 4. 本地测试连接 5. 安装cpolar 6. 配置公网访问地址 7. 固定连接公网地址 [TOC] > **转载自cpolar极点云文章:[群晖NAS 安装 MySQL远程访问连接](https://www.cpolar.com/blog/install-mysql-remote-…

Spring 事务使用详解

前言 什么是事务?根据 维基百科事务 介绍,数据库事务(简称:事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。简单来说,事务就是将一系列操作当成一个不可拆分…

报喜鸟如何触发数字化转型及品牌扩张战略分析

传统服装企业往往面临缺乏创新、盲目扩张、追求低成本、库存和行业周期性等问题。报喜鸟通过深入分析市场需求,明确聚焦主业,提出加强品牌核心竞争力的价值主张。通过实施DTC转型,发力电商平台和线下门店等举措,报喜鸟成功提高品牌…

VSC++=》 指针实数排序

缘由https://bbs.csdn.net/topics/396523482 void 指针实数排序(double* aa, int d) {//缘由https://bbs.csdn.net/topics/396523482double lin 0; int j d, jj 0;while (jj < d) if (--j > jj) if (aa[j] > aa[j - 1])lin aa[j], aa[j] aa[j - 1], aa[j - 1] …

Flask request和requests(客户端服务器)

Flask request和requests 1、Flask request属性2、requests属性3、实现代码 1、Flask request属性 这么多属性什么时候有值什么时候没值&#xff0c;其实完全取决于我们请求头content-type是什么&#xff0c;如果是以表单形式multipart/form-data、application/x-www-form-url…

辅助驾驶功能开发-功能规范篇(21)-3-XP行泊一体方案功能规范

XPilot Parking 自动泊车系统 七、全自动泊车(AutoParking) • 自动泊车辅助(AutoParking Assist)、斜列式车位泊车辅助(Diagonal AutoParking Assist) - 产品定义 基于超声波传感器和环视摄像头对空间和车位的识别,通过自动泊车系统实现全自动泊车入库。 - 功能说…

使用HHDESK图形化功能管理服务器

服务器的管理通常繁琐而枯燥&#xff0c;需要大量的命令行来执行。 所以图形化功能应运而生。 本篇以传输文件为例&#xff0c;简单介绍一下HHDESK的图形化管理功能。 首先需要配置好服务器。 点击连接管理&#xff0c;在连接类型中选择SSH&#xff0c;按照刚才在服务器中配…

方波信号轨迹跟踪(过冲与圆角)

在控制系统中&#xff0c;方波信号轨迹跟踪可能会面临过冲和圆角的问题。过冲是指跟踪信号超过期望值的现象&#xff0c;而圆角是指在方波信号变化时产生平滑的过渡。这些问题主要是因为传统的控制方法无法完美跟踪非线性的方波信号导致的。 过冲通常也称为超调。在方波信号的…

C++中的vector使用详解及重要部分底层实现

本篇文章会对vector的语法使用进行详解。同时&#xff0c;还会对重要难点部分的底层实现进行讲解。其中有vector的迭代器失效和深拷贝问题。希望本篇文章的内容会对你有所帮助。 目录 一、vector 简单概述 1、1 C语言中数组的不便 1、2 C中的动态数组容器vector 二、vector的常…

vue中实现div可编辑,并插入指定元素,样式

前言&#xff1a; vue中实现一个既可以编辑内容&#xff0c;有可以动态编辑内容插入一个带有样式的内容&#xff0c;改变默认内容后&#xff0c;这个样式消失的效果&#xff0c;这里来整理下调研与解决实现问题之路。 实现最终效果&#xff1a;图2为默认内容 1、可以光标点击任…

自定义MVC框架优化

目录 一、前言 二、优化问题 1.子控制器的初始化配置问题 2.页面跳转优化代码冗余问题 3.优化参数封装问题 三、进行优化 1.解决子控制器初始化配置 2.解决页面跳转的代码冗余问题 3.解决优化参数封装问题 4.中央控制器 一、前言 在自定义MVC框架原理中讲述了什么是…

Redis - Redis GEO实现经纬度测算距离,附近搜索范围

Redis GEO 主要用于存储地理位置信息&#xff0c;并对存储的信息进行操作&#xff0c;该功能在 Redis 3.2 版本新增 一、Redis GEO 操作方法 geoadd&#xff1a;添加地理位置的坐标 geopos&#xff1a;获取地理位置的坐标 geodist&#xff1a;计算两个位置之间的距离 geor…

client-go初级篇,从操作kubernetes到编写单元测试

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码)&#xff1a;https://github.com/zq2599/blog_demos 本篇概览 尽管长篇系列《client-go实战》的内容足够丰富&#xff0c;然而内容太多每个知识点也有一定深度&#xff0c;对于打算快速学习并开始kubernetes开发…

分层架构简介

MVC是架构模式&#xff08;设计模式中的结构性模式&#xff09;&#xff0c;不是系统架构&#xff0c;更不是我们常说的三层架构 MVC的缺陷如下&#xff1a; 1.导致控制器冗余&#xff08;有大量的业务逻辑&#xff0c;可能开始没有&#xff0c;但是后来越来越多&#xff09;…

QT学习笔记5--槽函数重载解决办法

connect函数 connect(sender, signal, receiver, slot); 槽函数示例 void student:: treat(QString foodname) void student:: treat(int index) 由上可见&#xff0c;有两个名字相同&#xff0c;但形参不同的槽函数。 可以通过函数指针的方式 &#xff0c;用指针指向具体…

linux环境安装mysql8.0.32

linux环境安装mysql8.0.32 一、下载安装包二、安装前准备2.1 卸载旧版本mysql2.2 检查是否安装了 mariadb 数据库2.3 安装依赖包创建 mysql 用户 三、安装3.1 上传并解压安装包&#xff08;上传路径没有要求&#xff0c;一般在/usr/local&#xff09;3.2 初始化数据库3.3 注册数…

Java面试题6月

redis有哪些缓存淘汰策略 https://blog.51cto.com/u_11720620/5198874 生产环境内存溢出&#xff08;OOM&#xff09;问题处理方案 https://note.youdao.com/ynoteshare/index.html?id5cc182642eb02bc64197788c7722baae&typenote&_time1688287588653 jstack找出占用…

C++之GNU C的__attribute__((constructor))和((destructor))静态构造函数实现(一百四十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

Elasticsearch实战(二十三)---ES数据建模与Mysql对比 一对多模型

Elasticsearch实战—ES数据建模与Mysql对比实现 一对多模型 文章目录 Elasticsearch实战---ES数据建模与Mysql对比实现 一对多模型1.一对多 模型1.1 Mysql建模 2.一对多 Index ES 数据模型2.1 类似Mysql, 依旧创建两个Index索引库2.2 采用ES架构 嵌套数组模型2.3采用ES架构 冗余…