当前位置:网站首页>内存溢出和内存泄漏的区别
内存溢出和内存泄漏的区别
2022-07-07 11:48:00 【全栈程序员站长】
内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。
内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。
memory leak会最终会导致out of memory!
内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出。
内存泄漏是指你向系统申请分配内存进行使用(new),可是使用完了以后却不归还(delete),结果你申请到的那块内存你自己也不能再访问(也许你把它的地址给弄丢了),而系统也不能再次将它分配给需要的程序。一个盘子用尽各种方法只能装4个果子,你装了5个,结果掉倒地上不能吃了。这就是溢出!比方说栈,栈满时再做进栈必定产生空间溢出,叫上溢,栈空时再做退栈也产生空间溢出,称为下溢。就是分配的内存不足以放下数据项序列,称为内存溢出.
以发生的方式来分类,内存泄漏可以分为4类:
1. 常发性内存泄漏。发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。 2. 偶发性内存泄漏。发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的也许就变成了常发性的。所以测试环境和测试方法对检测内存泄漏至关重要。 3. 一次性内存泄漏。发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块仅且一块内存发生泄漏。比如,在类的构造函数中分配内存,在析构函数中却没有释放该内存,所以内存泄漏只会发生一次。 4. 隐式内存泄漏。程序在运行过程中不停的分配内存,但是直到结束的时候才释放内存。严格的说这里并没有发生内存泄漏,因为最终程序释放了所有申请的内存。但是对于一个服务器程序,需要运行几天,几周甚至几个月,不及时释放内存也可能导致最终耗尽系统的所有内存。所以,我们称这类内存泄漏为隐式内存泄漏。
从用户使用程序的角度来看,内存泄漏本身不会产生什么危害,作为一般的用户,根本感觉不到内存泄漏的存在。真正有危害的是内存泄漏的堆积,这会最终消耗尽系统所有的内存。从这个角度来说,一次性内存泄漏并没有什么危害,因为它不会堆积,而隐式内存泄漏危害性则非常大,因为较之于常发性和偶发性内存泄漏它更难被检测到
重点排查以下几点: 1.检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。
2.检查代码中是否有死循环或递归调用。
3.检查是否有大循环重复产生新对象实体。
4.检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。
5.检查List、MAP等集合对象是否有使用完后,未清除的问题。List、MAP等集合对象会始终存有对对象的引用,使得这些对象不能被GC回收。
第四步,使用内存查看工具动态查看内存使用情况
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/113287.html原文链接:https://javaforall.cn
边栏推荐
- 供应链供需预估-[时间序列]
- Scripy tutorial classic practice [New Concept English]
- 现在网上开户安全么?那么网上开户选哪个证券公司?
- Leecode3. Longest substring without repeated characters
- Supply chain supply and demand estimation - [time series]
- Cmake learning and use notes (1)
- Read PG in data warehouse in one article_ stat
- .net core 关于redis的pipeline以及事务
- Realbasicvsr test pictures and videos
- Use of polarscatter function in MATLAB
猜你喜欢
"New red flag Cup" desktop application creativity competition 2022
Sliding rail stepping motor commissioning (national ocean vehicle competition) (STM32 master control)
Redis can only cache? Too out!
社会责任·价值共创,中关村网络安全与信息化产业联盟对话网信企业家海泰方圆董事长姜海舟先生
2022-7-6 使用SIGURG来接受外带数据,不知道为什么打印不出来
Centso7 OpenSSL error Verify return code: 20 (unable to get local issuer certificate)
xshell连接服务器把密钥登陆改为密码登陆
作战图鉴:12大场景详述容器安全建设要求
1. Deep copy 2. Call apply bind 3. For of in differences
C语言数组相关问题深度理解
随机推荐
ROS机器人更换新雷达需要重新配置哪些参数
Build a secure and trusted computing platform based on Kunpeng's native security
高等數學---第八章多元函數微分學1
Deep understanding of array related problems in C language
OSI seven layer model
My "troublesome" subordinates after 00: not bad for money, against leaders, and resist overtime
Getting started with MySQL
Error lnk2019: unresolved external symbol
Use of polarscatter function in MATLAB
存储过程的介绍与基本使用
靠卖概念上市,认养一头牛能走多远?
Supply chain supply and demand estimation - [time series]
How far can it go to adopt a cow by selling the concept to the market?
Ogre introduction
Battle Atlas: 12 scenarios detailing the requirements for container safety construction
Ikvm of toolbox Net project new progress
Navicat运行sql文件导入数据不全或导入失败
SSRF漏洞file伪协议之[网鼎杯 2018]Fakebook1
LeetCode_ Binary search_ Medium_ 153. Find the minimum value in the rotation sort array
数据库系统概论-第一章绪论【概念模型、层次模型和三级模式(外模式、模式、内模式)】