什么是内存溢出,什么是内存泄漏?

文章目录

  • 一、什么是内存溢出?
  • 二、什么是内存泄漏?
  • 三、如何避免?



提示:以下是本篇文章正文内容,下面案例可供参考

一、什么是内存溢出?

假设我们 JVM 中可用的内存空间只剩下 3M,但是我们要创建一个 5M 的对象,那么,新创建的对象就放不进去了。这个时候,我们就叫做内存溢出。就好比是一个容量只有 300ml 的水杯,我们硬要往里面倒500ml 的水,这时候,水就会溢出,倒不进去了,这就相当于是内存的溢出。

二、什么是内存泄漏?

在这里插入图片描述
它代表业务代码执行时,所需要占用的内存空间。这段业务代码中创建了两个 1M 的对象,一起会占用 2M 内存。当对象使用完之后,这两个对象并没有释放,因此内存中会留下 2M 的内存空间一直被占用。而我们的业务代码在程序中会被反复执行,每次执行都会留下 2M 不被释放,反复执行多次之后,随着时间的累积,就会有大量的对象用完不被释放,导致这些对象不能得到回收而发生内存溢出,这种情况就叫做内存泄漏。
也就说,在我们的业务代码执行过程中,有些对象它应该被回收,但是又有其他对象引用引用它,因此,GC 不能自动回收。所以,该回收的垃圾对象没有被回收,垃圾对象越堆越多,可用内存越来越少,若可用内存无法存放新的垃圾对象,最终导致内存泄漏。内存泄漏最终会导致内存溢出。

三、如何避免?

1、规范动态内存的使用,尽量避免不当用法;
2、及时检测到程序中有内存泄漏,并准确的定位到内存泄漏的具体位置(内存泄漏检测组件)
3、减少不必要的全局变量,或者生命周期较长的对象,及时对无用的数据进行垃圾回收。
4、注意程序逻辑,避免“死循环”。
5、避免创建过多的对象。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

测试员眼中的____是____

- 1 - 测试员眼中的开发是淘气的孩子 只有靠哄、豁、骗 才能让其完成“作业” - 2 - 测试员眼中的产品经理是女票 不管大小事,只要意见有出入 都得与其商量,才能最终拍板 - 3 - 测试员眼中的UI是艺术家 每天都操着画板(苹果显示器&#xff…

DatenLord前沿技术分享 No.29

达坦科技专注于打造新一代开源跨云存储平台DatenLord,通过软硬件深度融合的方式打通云云壁垒,致力于解决多云架构、多数据中心场景下异构存储、数据统一管理需求等问题,以满足不同行业客户对海量数据跨云、跨数据中心高性能访问的需求。BSV的…

测试员拒绝当“背锅侠”,软件质量不是“测”出来的!

以前有个朋友跟我说:做测试这行就是在隐忍中负重前行。因为测试是软件发布前的最后一个环节,被称作质量出口儿,测试环节之前所有未做好的工作所带来的不良后果,似乎都能被轻松甩锅给测试人员。软件一旦出现问题,我们经…

Tomcat多实例部署

文章目录 一、下载JDK包和tomcat包二、安装JDK和tomcat三、配置 tomcat 环境变量四、修改 tomcat2 中的 server.xml 文件,要求各 tomcat 实例配置不能有重复的端口号五、修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 环境变量六、…

神坑:ElasticSearch8集群启动报错“Device or resource busy”(Docker方式)

昨天在Docker中配置ElasticSearcch8集群模式时,先初步配置了master主节点。然后主节点启动就报错,看日志,提示“Device or resource busy”。异常第一句大概这个样子: Exception in thread "main" java.nio.file.FileS…

CMake快速入门

CMake快速入门 CMake 官网:CMake CMake 是一个 跨平台 的安装编译工具,可以用简单的语句来描述 所有平台 的安装(编译过程)CMake 可以说已经成为 大部分C开源项目的标配 1. 为什么要使用CMake? 比如说有一个开源项目,里面有很多 C 的源代…

三、eureka-server端和客户端配置文件讲解

常用配置文件设置 通过这张图理解为什么要进行文件配置 server 中常用的配置 server:port: 8761spring:application:name: eureka-servereureka:client:service-url: #eureka 服务端和客户端的交互地址,集群用,隔开defaultZone: http://localhost:8761/eureka #自己注册自…

人脸识别4:Android InsightFace实现人脸识别Face Recognition(含源码)

人脸识别4:Android InsightFace实现人脸识别Face Recognition(含源码) 目录 人脸识别4:Android InsightFace实现人脸识别Face Recognition(含源码) 1. 前言 2. 项目说明 (1)开发版本 (2)依赖库说明(O…

【花雕】全国青少年机器人技术一级考试试卷(实操真题之三)

随着科技的不断进步,机器人技术已经成为了一个重要的领域。在这个领域中,机械结构是机器人设计中至关重要的一部分,它决定了机器人的形态、运动方式和工作效率。对于青少年机器人爱好者来说,了解机械结构的基础知识,掌…

银河麒麟系统安装mysql数据库[mysql-5.7.28-linux-glibc2.12-x86_64]

银河麒麟系统安装mysql数据库 1.1 准备材料 mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz MySQL5.7下载地址 https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz 1.1 安装前准备工作 1、检查是否已经安装MySQL [rootlocalhost ~]# rpm …

Django Vue corsheaders跨域问题

跨域问题 记录一下在我自己的django-vue项目里面出现的跨域问题 我的项目之前一直是在本地跑的,因为需要上线测试,所以我就运行在同一个vlan里面 ip段:192.168.1.0/24 突然发现存在跨域问题,我django的接口访问被拦截了。 检查…

MAVEN的学习

MAVEN的作用是什么? 依赖管理:方便快捷的管理项目的资源(jar包),避免版本冲突问题统一项目结构:提供标准、统一的项目结构项目构建:标准跨平台(Linux、windows、MacOS)的…