JVM内存溢出与内存泄露

news2024/9/27 17:26:22

1. 什么是内存溢出?

当前创建的对象的大小大于可用的内存容量大小,发生内存溢出。

在这里插入图片描述

2. 什么是内存泄露?

该回收的垃圾对象没有被回收,发生了内存泄露,垃圾对象越堆越多,
可用内存越来越少,若可用内存无法存放新的垃圾对象,就导致内存溢出。
内存泄露会导致内存溢出

在这里插入图片描述

3. 内存溢出的几种原因和解决办法

1.内存中加载的数据量过于庞大,如一次从数据库取出过多数据。

解决方法:检查对数据库查询中,是否有一次获得全部数据的查询;
	对于数据库查询尽量采用分页的方式查询。

2.集合类中有对对象的引用,使用完后未清空,使得JVM不能回收。

解决方法:检查List、MAP等集合对象是否有使用完后,未清除的问题。
	List、MAP等集合对象会始终存有对对象的引用,使得这些对象不能被GC回收。

3.代码中存在死循环循环产生过多重复的对象实体

解决方法:检查代码中是否有死循环或递归调用;
	检查是否有大循环重复产生新对象实体。

4.启动参数内存值设定的过小

解决方法:修改JVM启动参数(-Xms,-Xmx),直接增加内存。

4. 内存泄漏的几种原因

4.1 静态集合类引起内存泄漏

静态集合的生命周期和 JVM 一致,所以静态集合引用的对象不能被释放。

public classOOM{ 
	static List list =newArrayList();
	public void oomTests(){ 
		Object obj =new Object(); 
		list.add(obj);
	}
}

4.2 单例模式

和上面的例子原理类似,单例对象在初始化后会以静态变量的方式在 
JVM 的整个生命周期中存在。如果单例对象持有外部的引用,
那么这个外部对象将不能被 GC 回收,导致内存泄漏。

4.3 忘记关闭数据库连接、IO、Socket等资源

数据连接、IO、Socket等连接创建的连接不再使用时,需要调用 close 方法关闭连接,只有连接被关闭后,GC 才会回收对应的对象(Connection,Statement,ResultSet,Session)。
忘记关闭这些资源会导致持续占有内存,无法被 GC 回收。

try{ 
	Connection conn = null; 
	Class.forName("com.mysql.jdbc.Driver"); 
	conn = DriverManager.getConnection("url","",""); 
	Statement stmt = conn.createStatement(); 
	ResultSet rs = stmt.executeQuery("....");
}catch(Exception e){
 
}finally{
  //不关闭连接
}}

4.4 变量不合理的作用域

一个变量的定义作用域大于其使用范围,很可能存在内存泄漏;或不再使用对象没有及时将对象设置为 null,很可能导致内存泄漏的发生。

public class Simple{ 
	Object object;
	public void method1(){ 
		object =newObject();
		//...其他代码
		//由于作用域原因,method1执行完成之后,
		//object 对象所分配的内存不会马上释放
		object = null;
 }}

4.5 ThreadLocal 造成的内存泄漏

ThreadLocal 可以实现变量的线程隔离,但若使用不当,就可能会引入内存泄漏问题。

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

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

相关文章

【神经网络】LSTM为什么能缓解梯度消失

1.LSTM的结构 我们先来看一下LSTM的计算公式: 1.遗忘门: 2.输入门: 3.细胞状态 4.输出门 2.LSTM的梯度路径 根据LSTM的计算公式,可以得出LSTM的cell state与、、都存在计算关系,而、、的计算公式又全部都与有关&#x…

【目标检测】入门基础原理学一遍就够了吧

我菜就爱学 文章目录目标检测实战1 目标检测简介1.1 目标检测分类1.2 检测的任务1.3 目标定位实现的思路1.4 两种bbox名称解释2 R-CNN2.1 目标检测-Overfeat模型2.2 目标检测-R-CNN模型2.2.1 候选区域(ROI)2.2.2 CNN网络提取特征2.2.3 特征向量训练分类器…

vue2--基于zm-tree-org实现公司部门组织架构图

1.安装zm-tree-org npm i zm-tree-org -S2.引入使用 import Vue from vue; import ZmTreeOrg from zm-tree-org; import "zm-tree-org/lib/zm-tree-org.css";Vue.use(ZmTreeOrg);3.个人需求 组织架构图中:部门可拖动更改所属部门,可增加部门…

javascript学习+Vue学习+项目开发

一 《学习JavaScript数据结构与算法》 1.ES2015的类是基于原型语法的语法糖 2.TypeScript是一个开源的、渐进式包含类型的JavaScript超集 以.ts为扩展名 以tsc命令来编译它 TypeScript允许我们给变量设置一个类型,不过写法太啰唆了。 TypeScript有一…

博客系统——项目测试报告

目录 前言 博客系统——项目介绍 1、测试计划 1.1、功能测试 1.1.1、编写测试用例 1.1.2、实际执行步骤 1.2、使用Selenium进行Web自动化测试 1.2.1、引入依赖 1.2.2、提取共性,实现代码复用 1.2.3、创建测试套件类 1.2.4、博客登录页自动化测试 1.2.5、…

SQL注入报错注入之floor()报错注入原理分析

简介 对于SQL注入的报错注入通常有三个函数需要我们掌握: extractValue(xml_frag, xpath_expr)updateXML(xml_target, xpath_expr,new_xml)floor() 对于extractValue和updateXML函数来说比较好理解,就不做解释了,这里只对floor函数的报错注…

LabVIEW网络服务安全2

LabVIEW网络服务安全2在客户端应用程序中创建签名对请求进行签名要求您具有能够从客户端的编程语言调用的MD5摘要算法以及SHA256加密摘要算法的实现。这两种算法通常都可用于大多数平台。还需要:1. 要使用的HTTP方法的字符串(“GET”、“POST”、“PUT”…

收发器上的10G网络变压器有什么特殊要求?

Hqst盈盛电子导读:那么,为了保证我们购买到正常的真正的具备POE功能的10G网络变压器,我们又要如何做呢以及如何判断呢?随着高速以太网网络传速的快速发展,10G以太网,10G网络变压器滤波器在各个领域也得到了…

基于SpringCloud的可靠消息最终一致性05:保存并发送事务消息

在有了分布式事务的解决方案、项目的需求、骨架代码和基础代码,做好了所有的准备工作之后,接下来就可以继续深入了解「核心业务」了。 在前面了解分布式事务时,可靠消息最终一致性方案的流程图是这样的: 图三十一:可靠消息最终一致性 整个的流程是: 1、业务处理服务在事务…

GLSL shader学习系列1-Hello World

这是GLSL shader系列第一篇文章,本文学习目标: 安装编辑工具编写hello world程序 安装插件 我使用VSCode编写shader代码,在VSCode上有两个好用的插件需要先装一下: Shader languages support for VS Code glsl-canvas&#xf…

优维科技实力入选《2023深圳金融业信息技术融合创新案例汇编》

日前,由深圳市金融科技协会编制的《2023深圳金融业信息技术融合创新案例汇编》于“2022中国(深圳)金融科技全球峰会”正式对外发布,共汇编近90个优秀金融技术应用实践案例,优维科技凭借在“某银行自动化运维XC改造项目…

STM32——毕设智能感应窗户

智能感应窗户 一、功能设计 以STM32F103芯片最小系统作为主控,实现自动监测、阈值设定功能和手动控制功能。 1、自动监测模式下: ① 采用温湿度传感器,实现采集当前环境的温度、湿度数值。 ② 采用光敏传感器,实现判断当前的环境…

【数据库/MySQL】MySQL三大日志提要

MySQL三大日志 mysql常用日志 错误日志查询日志慢查询日志事务日志【redo log(重做日志)、undo log(回滚日志)】二进制日志【bin log】 MySQL日志中比较重要的包括redo log(重做日志)、binlog&#xff0…

Docker 网络详解

前置网络知识 OSI七层网络模型 从下到上依次为:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。 交换机:处在第二次,也就是数据链路层。作用:通过一个或者多个设备将不同子网连接在一起,相互通信&am…

Ant Design Vue 如何添加时间选择框

第一步引入 组件 import JDate from /components/jeecg/JDate使用 重点代码 <j-date<a-col :span"24/2"><a-form-item :labelCol"labelCol" :wrapperCol"wrapperCol" label"验收日期"><j-date placeholder"…

Lesson9---回归问题

9.1 机器学习基础 课程回顾 Python语言基础Numpy/Matplotlib/Pandas/Pillow应用TensorFlow2.0 低阶API 即将学习 机器学习、人工神经网络、深度学习、卷积神经网络典型模型的TensorFlow2.0实现 9.1.1 机器学习 机器学习&#xff08;Machine Learning&#xff09;&#xf…

2023年湖北七大员证书查询网站是哪里?

一、湖北七大员是哪七大员&#xff1f; 湖北七大员分别是&#xff1a;施工员、质量员、资料员、材料员、标准员、劳务员和机械员。其中施工员和质量员分为&#xff1a;市政、土建、装饰装修和设备安装四个子专业&#xff0c;其他不分。 二、湖北七大员证书查询网站是哪里&#…

Node下载阿里OSS存储文件【不知目录结构】

前言&#xff1a;前端传模型ID&#xff0c;后台根据ID去阿里OSS存储下载对应文件&#xff08;不知文件内部层级结构&#xff0c;且OSS只能单个文件下载&#xff09;&#xff0c;打包成zip字节流形式返回给前端下载。 需求分析&#xff1a; 生成OSS文件关系树Node做文件下载存…

ClickHouse 相关面试题

文章目录什么是 ClickHouse&#xff0c;它的特点是什么&#xff1f;ClickHouse的数据存储方式是什么&#xff0c;它与传统的行式存储有什么区别&#xff1f;ClickHouse 引擎ClickHouse的数据模型是什么&#xff0c;它与传统的关系型数据库的数据模型有什么区别&#xff1f;Clic…

【TVM 学习资料】TensorIR 快速入门

本篇文章译自英文文档 Blitz Course to TensorIR 作者是 Siyuan Feng。更多 TVM 中文文档可访问→TVM 中文站 TensorIR 是深度学习领域的特定语言&#xff0c;主要有两个作用&#xff1a; 在各种硬件后端转换和优化程序。自动 tensorized 程序优化的抽象。 import tvm from…