OOM(内存溢出)造成原因及解决方案

2023-11-10

一、概念

内存溢出(Out Of Memory,简称OOM)是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于能提供的最大内存。

二、造成原因

2.1、内存泄漏

由于长期保持某些资源的引用,垃圾回收器无法回收它,从而使该资源不能够及时释放,也称为内存泄露。因而尽量不要将所有引用都使用为强引用,可以在合适的地方使用弱引用和软引用。

2.2、超大对象

保存多个耗用内存过大或当加载单个超大的对象时,该对象的大小超过了当前剩余的可用内存空间。比如查询数据库中的数据,一次查询过多,直接导致内存溢出了。因此查询数据库如果数据过多尽量使用分页查询。

2.3、其他各种原因

比如是否存在死循环,大循环重复产生对象,是否有集合对象使用完之后,依然被引用着,导致无法清除,是否使用了不恰当的数据结构,导致占用空间过大等等。

三、解决方案

3.1、修改JVM启动参数,直接增加内存

JVM默认可以使用的内存为64M,Tomcat默认可以使用的内存为128MB,对于稍复杂一点的系统就会不够用。在某项目中,就因为启动参数使用的默认值,经常报“Out Of Memory”错误。因此,-Xms,-Xmx(堆内存的最小大小和最大大小值)参数一定不要忘记加。

3.2、找出可能发生内存溢出的位置,并解决

检查代码中是否有死循环或递归调用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OOM(内存溢出)造成原因及解决方案 的相关文章

  • 尝试使用 Eclipse 启动 Glassfish 服务器时出现 org.apache.catalina.LifecycleException

    我一直忙于使用 angularjs 前端构建一个 REST 应用程序 使用 MAVEN jersey quickstart webapp 使用 GLASSFISH Web 服务器在 Eclipse 上开发 今天 当我开始对项目进行一些开发时
  • 在 Java Swing 中检测 JScrollPane 上的 mouseClick 事件

    如果我有这样的东西 我可以使用布尔标志 performAdjustment 控制自动滚动 static boolean performAdjustment true JTextArea textArea new JTextArea JScr
  • Android NumberPicker 带字符串

    I have customised the NumberPicker to show text The output is this 当我按 确定 时 我想将 e x 鼠标添加到我的列表 文章 中 我得到的是索引值 int 它由 array
  • Hibernate OneToMany 关系是 PersistentBag 而不是 List

    我正在 javafx 中开发一个应用程序 它通过 RMI 与 EAR 连接 该 EAR 连接到 SQLServer DB 并使用 hibernate 映射 POJOS 这些 POJOS 包含双向 OneToMany 和 ManyToOne
  • V8 如何管理它的堆?

    我知道V8的垃圾收集在工作时 会从GC的root开始追踪 这样无法到达的对象就会被标记然后被清除 我的问题是GC是如何遍历那些对象的 必须有一个数据结构来存储所有可达或不可达的对象 位图 链接表 顺便说一句 JVM 也做同样的事情吗 艾伦秀
  • Java Swing:清除JList而不触发监听器

    我的情况如下 我有一个 JList 只要在列表中进行选择 它就会触发搜索 使用 ListSelectionListener 我正在尝试使用以下命令重置列表上的选择list clearSelection 这样做的问题是使用clearSelec
  • 以编程方式将 PEM 证书导入 Java KeyStore

    我有一个由两个文件 crt 和 key 组成的客户端证书 我希望将其导入到 java KeyStore 中 然后在 SSLContext 中使用 以通过 Apache 的 HTTPClient 发送 HTTP 请求 但是 我似乎找不到一种以
  • JUnit 使用 Mockito 测试异步方法

    我已经使用 Spring Framework 版本 5 0 5 RELEASE 在 Java 1 8 类中实现了异步方法 public class ClassToBeTested Autowired private MyComponent
  • 如何正确配置Tomcat SSLHostConfig?

    我正在按照本教程在 tomcat 中启用 ssl https medium com raupach how to install lets encrypt with tomcat 3db8a469e3d2 https medium com
  • 无法从后台服务通过 WiFi 访问互联网

    我将直接介绍我发现的一些事实 数据 如果您遇到 解决了类似的问题 请帮助我 我每 5 分钟向服务器发送一次数据 除非用户在服务器的帮助下手动将其关闭 wakeful broadcast receiver通过一个intent service
  • Maven 多模块项目结构问题

    自从过去几周构建我的 Maven 多模块项目以来 这是我的一次有趣的经历 当我决定使用 Maven 进行构建生命周期管理时 我有几个原因希望选择 Maven A 大多数开发团队都是分开的 这样每个团队都可以在项目中的单独模块上工作 例如团队
  • 我们可以在三元运算符(Java)中使用命令吗?

    这是一个工作代码 String a first String b second String object System out println object null a b 但它不是 String a first String b se
  • 在 Mac 上使用 JRE 打开 jar 文件

    我有一个 jar 文件 旨在通过命令行运行 我不打算在运行应用程序的机器上进行任何java开发 我的思考过程是 因此我应该只需要JRE而不是JDK 此外 JDK 大约是 JRE 的 4 倍 我不想下载它 在 Mac 上安装 JRE 时 它不
  • 存储过程将多个表返回到 spring jdbc 模板

    我正在使用 JdbcTemplate 从 Spring DAO 类调用存储过程 我的问题是 存储过程返回多个表 有没有办法使用 Spring JdbcTemplate 访问多个表 如果我使用jdbcTemplate queryForList
  • @TestPropertySource 不适用于 Spring 1.2.6 中使用 AnnotationConfigContextLoader 的 JUnit 测试

    似乎我在 Spring 4 1 17 中使用 Spring Boot 1 2 6 RELEASE 所做的任何事情都不起作用 我只想访问应用程序属性并在必要时通过测试覆盖它们 无需使用 hack 手动注入 PropertySource 这不行
  • 为什么在尝试使用 Java 连接到 RDS PostgreSQL 数据库时会收到 SocketTimeoutException?

    我有一个 Spring 应用程序 我试图在 AWS 上托管 几天来我一直在努力配置 我有一个 EC2 实例 并且能够通过 SSH 连接到它 我还在 AWS 中设置了 Postgres RDS 数据库 但我无法使用 IDE 中的代码连接到它
  • 防止 Firebase 中的待处理写入事务不起作用

    我的目标是在单击按钮时将名称插入 Cloud Firestore 中 但如果用户未连接到互联网 我不希望保存处于挂起状态 我不喜欢 Firebase 保存待处理写入的行为 即使互联网连接已恢复 我研究发现Firebase 开发人员建议使用事
  • Java SE + Spring Data + Hibernate

    我正在尝试使用 Spring Data Hibernate 启动 Java SE 应用程序 并且到目前为止已经完成了以下操作 配置文件 Configuration PropertySource classpath hibernate pro
  • 监控 Java 应用程序上的锁争用

    我正在尝试创建一个小基准 在 Groovy 中 以显示几个同步方法上的高线程争用 当监控自愿上下文切换时 应该会出现高争用 在 Linux 中 这可以通过 pidstat 来实现 程序如下 class Res private int n s
  • 如何使用 Spring AOP 建议静态方法?

    在执行类的静态方法之前和之后需要完成一些日志记录 我尝试使用 Spring AOP 来实现这一点 但它不起作用 而对于正常方法来说它起作用 请帮助我理解如何实现这一点 如果可以使用注释来完成 那就太好了 也许您应该在使用 Spring AO

随机推荐

  • JWT简介及使用

    JWT简介及使用 JWT JWT能做什么 认证流程 为什么需要JWT jwt结构 JWT使用 java jwt jjwt JWT工具类编写 JWT整合springboot JWT整合Springboot优化 JWT jwt json web
  • 机器学习实战python版第二章示例:手写识别系统

    手写识别系统和前面的例子差不多 我们所需要做的就是把图数据转换成一维数组数据 数据准备 def img2vector filename returnVect zeros 1 1024 创建一行1024列的数组 fr open filenam
  • tcpdump 移植

    一 环境介绍 1 1 宿主机 1 2 嵌入式平台 1 3 交叉工具链 二 交叉编译 2 1 先编译 tcpdump 4 8 1 依赖的模块 2 2 编译 tcpdump 4 8 1 三 使用测试 一 环境介绍 1 1 宿主机 Ubuntu
  • 如何用IDEA配置数据库链接

    版本 idea 2021 2 MySQL5 7 很多小伙伴在idea中写SQL语句会爆红 可能就是因为idea没有与数据库进行连接 导致不识别数据库中的关键字 下面讲解一下如何配置idea与数据库的连接 步骤如下 第一步 打开idea 找到
  • Excel:如何实现分组内的升序和降序?

    一 POWER 1 构建辅助列D列 在D2单元格输入公式 POWER 10 COUNTA A 2 A2 3 C2 2 选中B1 D10 注意不能宣导A列的合并单元格 进行以下操作 3 删除辅助列即可 二 COUNTA 第一步 D2建立辅助列
  • SQL Server期末复习要点(一)

    1 SQL Server所提供的服务中 MSSQLServer是最核心的一部分 2 SERVER2005常规标识符是哪些 算术运算符 逻辑运算符 赋值运算符 字符串串联运算符 按位运算符 一元运算符及比较运算符等 3 聚合函数的使用 max
  • DirectX教程(8):全屏显示

    使游戏全屏显示很容易 但是需要更改程序的一些细节 并添加几行代码 在本节中 我们将介绍两件事 首先 我们将介绍如何全球化你的屏幕分辨率以及为什么要这样做 其次 我们将介绍如何使窗口进行全屏模式并再次返回的机制 设置屏幕尺寸 在你的Direc
  • 刷脸智慧化经营助商家高效运营店铺新方式

    迈入5G后 网速在变 生活方式在变 商家的运营模式也应该做出改变 智慧数字经营 助力商家高效运营店铺的新方式 时代的发展速度之快 越来越出乎意料 从2G到3G 再从3G到4G 乃至现在的5G 发展从未停滞 一直在快步向前 快到我们还在对4G
  • leetcode——189.轮转数组(C语言2种思路)

    文章目录 1 题目 2 解法1 开辟新数组 2 1 思路 2 2 代码实现 3 解法2 翻转法 3 1 思路 3 2 代码实现 1 题目 给定一个整数数组 nums 将数组中的元素向右轮转 k 个位置 其中 k 是非负数 示例1 输入 nu
  • maven 打包时后缀加时间

    规范的包名对开发及运维人员的记录及备份是有益的 如何在maven 打包时后缀加时间 在原有打包plugin后面加如下代码
  • 数据结构:面试题目-专项练习-栈-习题练习

    1 下列关于栈叙述正确的是 正确答案 D 你的答案 D 正确 算法就是程序 设计算法时只需要考虑数据结构的设计 设计算法时只需要考虑结果的可靠性 以上三种说法都不对 解析 A 程序是数据结构 算法 错 B C 设计一个算法时 考虑的因素很多
  • 迅为i.MX6ULL开发板Platform设备驱动运行测试

    文章目录 1 编译驱动和设备程序 2 编译应用测试程序 3 运行测试 1 编译驱动和设备程序 和前面章节中驱动测试程序一样需要一个Makefile文件 只是将obj m的值改为led device o led driver o Makefi
  • vue项目初始化出现tar ENOENT: no such file or directory错误的解决办法。

    在npm install时 出现了tar ENOENT no such file or directory报错 原因 node的版本问题 解决办法 全局环境下更新node版本 或者使用公司内部包装过后的的 node 按照顺序运行下面的语句
  • 认识磁盘阵列柜性能

    一个 SCSI 硬盘的平均故障间隔时间 MTBF Mean Time Between Failure 都在数万 小时以上 在正常使用情况下 要坏掉一个硬盘已经很不容易了 在同一系统内 两个磁 盘驱动器同时坏掉的机率 更是微乎其微 但是 如果
  • Python中 ddt 数据驱动的小细节

    文章目录 前言 一 什么是DDT 二 安装ddt 三 基本原理和用法 总结 前言 记录ddt用法的一些小细节 一 什么是DDT DDT是 Data Driven Tests 的缩写 数据驱动测试 既然是测试 那么就要与单元测试框架一起使用
  • IDEA 4种解决控制台中文乱码问题

    前言 IntelliJ IDEA 如果不进行配置的话 运行程序时控制台中文乱码问题会非常严重 严重影响我们对信息的获取和程序的跟踪 我总结以下 4 点用于解决控制台中文乱码问题 希望有助于大家 注意 下面根据我日常工作的经验总结 排序的先后
  • 什么是吉布斯采样(Gibbs Sampling)

    目录 1 蒙特卡洛方法 1 1 蒙特卡洛方法的作用 1 2 非均匀分布采样 1 3 分布p x 不好采样怎么办 2 什么是吉布斯采样 2 1 马尔可夫链 2 1 1 什么是马尔可夫链呢 2 1 2 为什么我们要引入马尔可夫链 2 1 3 对
  • 快速学会git版本管理——创建分支和合并分支

    首先创建分支 git创建分支只需要使用switch 命令 git switch c 分支名 创建分支并切换到该分支 大家看后面的括号里已经变成了dev 说明我们切换成功了 然后想要合并分支就在 创建的分支中 进行提交修改的内容 还是通过 a
  • 5G QoS控制原理专题详解-QoS控制原理(2)

    相关文章会在公众号同步更新 最近工作忙 更新完公众号后 经常容易忘记再CSDN上再发 公众号上的文章更新的能快一些 各位同学有兴趣可以关注一下 公众号 5G通信大家学 持续更新的相关5G内容都是直接根据3GPP整理 保证更新内容的准确性 避
  • OOM(内存溢出)造成原因及解决方案

    一 概念 内存溢出 Out Of Memory 简称OOM 是指应用系统中存在无法回收的内存或使用的内存过多 最终使得程序运行要用到的内存大于能提供的最大内存 二 造成原因 2 1 内存泄漏 由于长期保持某些资源的引用 垃圾回收器无法回收它