> 科技 > 互联网 > 什么是内存溢出,内存泄露?他们的区别是什么?(内存泄露会导致内存溢出吗)

什么是内存溢出,内存泄露?他们的区别是什么?(内存泄露会导致内存溢出吗)

来源:湘潭网 时间:2022-11-23 03:56:35 编辑:君子莲 手机版

今天湘潭网为大家带来一篇关于内存溢出和内存泄漏有什么区别,内存溢出的文章,相信大家还不了解,为了更好的学习,小编为大家整理了以下内容,希望能够帮助到大家!

摘要:内存溢出和内存泄漏有什么区别?如何解决在内存溢出?内存溢出是指当一个程序申请内存时,没有足够的内存空间供其使用,出现内存不足;例如,如果你申请一个整数,但给它一个长整型,可以保存的数字是内存溢出内存泄漏意味着程序在申请内存后无法释放申请的内存空间。一次内存泄漏的危害可以忽略不计,但是内存泄漏累积的后果是非常严重的。再多的内存,迟早都会被占用。

[内存溢出]内存溢出如何解决内存溢出和内存泄漏的区别?

和内存溢出内存泄漏。

内存内存溢出是指当一个程序申请内存时,没有足够的内存空间供其使用,出现内存不足;比如你申请一个整数,但是给它一个long,可以保存的数是内存溢出

内存泄漏内存泄漏是指程序在申请内存后无法释放申请的内存空间。一次内存泄漏的危害可以忽略不计,但是内存泄漏累积的后果是非常严重的。再多的内存,迟早都会被占用。

内存泄漏最终会导致内存不足!

也就是内存溢出分配的内存超过了系统能给你的,系统满足不了需求,所以溢出了。

内存泄漏是指你向系统申请分配内存使用(new),但使用后不归还(delete)。这样一来,你就无法访问你自己申请的内存(可能你把它的地址弄丢了),系统也无法再把它分配给需要的程序。一个盘子无论如何只能装四个水果,但是你放了五个,然后它就掉到地上吃不下了。这是溢出!比如当栈满时,将其推入栈中,必然会导致空间溢出,称为溢出。当堆栈为空时,将其推出也会导致空间溢出,称为下溢。也就是说,分配的内存不足以容纳数据项序列,这称为内存溢出

按照发生的方式分类,内存泄漏可以分为4类:

1.频繁内存泄漏。有内存泄漏的代码会被执行几次,每次执行都会造成内存泄漏。

2.偶尔内存泄漏。内存泄漏的代码只会在某些特定的环境或操作过程中发生。复发和散发是相对的。对于特定的环境,偶尔可能会变成经常。因此,测试环境和测试方法对于检测内存泄漏非常重要。

3.一次性内存泄漏。有内存泄漏的代码只会执行一次,或者由于算法的缺陷,总会有一个且只有一个内存泄漏。比如内存是在类的构造函数中分配的,但是在析构函数中没有释放,所以内存泄漏只会发生一次。

4.隐式内存泄漏。程序在运行过程中不断分配内存,但直到最后才释放内存。严格地说,这里没有内存泄漏,因为最终的程序释放了所有请求的内存。然而,对于一个服务器程序来说,它需要运行几天、几周甚至几个月。不能及时释放内存也可能导致系统中所有内存的最终耗尽。因此,我们将这种内存泄漏称为隐式内存泄漏。

从用户使用程序的角度来看,内存泄露本身不会造成任何伤害。作为一般用户,根本感觉不到内存泄露。真正有害的是内存泄漏的积累,最终会消耗掉系统的所有内存。从这个角度来说,一次性内存泄漏是无害的,因为它不会累积,而隐式内存泄漏是非常有害的,因为它比频繁和偶尔的内存泄漏更难检测。

内存溢出的成因及解决方法

有许多原因,内存溢出,和边肖列举了以下共同的原因:

1.内存中加载的数据量太大,比如一次从数据库中取出的数据太多;

2.集合类中有对对象的引用,使用后不清空,JVM无法回收;

3.代码中存在无限循环,或者循环生成的重复对象实体太多;

4.使用的第三方软件中的Bugs

5.启动参数的存储值设置得太小。

内存溢出解决方案:

第一步是修改JVM启动参数,直接增加内存。(-Xms,-Xmx参数必须添加。)

其次,检查错误日志,查看在“OutOfMemory”错误之前是否有其他异常或错误。

第三步是遍历并分析代码,找出内存溢出可能的位置

重点关注以下几点:

1.检查数据库查询中是否有针对所有数据的查询。一般来说,如果你一次取100,000条记录到内存中,就可能导致内存溢出这个问题被隐藏起来。在上线之前,数据库里的数据比较少,不容易出问题。上线后,数据库中的数据比较多,一次查询就可能造成内存溢出,因此,数据库查询要尽量分页。

2.检查代码中是否有无限循环或递归调用。

3.检查是否存在重复生成新对象实体的大循环。

4.检查数据库查询中是否有针对所有数据的查询。一般来说,如果你一次取100,000条记录到内存中,就可能导致内存溢出这个问题被隐藏起来。在上线之前,数据库里的数据比较少,不容易出问题。上线后,数据库中的数据比较多,一次查询就可能造成内存溢出,因此,数据库查询要尽量分页。

5.检查列表、地图等集合对象使用后是否未清除。像List和MAP这样的集合对象总是有对对象的引用,所以这些对象不能被GC回收。

步骤4:使用内存查看工具动态查看计算机内存使用情况。

本文讲解到此结束,希望对大家有所帮助。

君子莲(www.junzilian.com)湘潭网,关注长株潭地区房产、人才招聘、教育、创业、旅游、美食、天气、特产、生活周边信息,欢迎投稿给我们!

最近更新

  • 2021视频自媒体平台排行榜:快手上榜,第二火到海外

      现在是一个互联网非常发达的时代,所以从互联网中衍生出了一个新兴职业,这种职业被叫做为自媒体,一般被人们叫做为网红,做自媒体需要有创意和剪辑视频的能力,从而吸引粉丝来为你买单,新沂网今天要为大家带来的是2021视频

    互联网 日期:2021-03-18

  • 自媒体赚钱的十大平台:微视上榜,第一全世界使用范围广

      自媒体是现在非常年轻也是非常火爆的一种职业,因为做自媒体不需要遭受公司和上级的限制,只要自己想出好的题材,并且将自己的视频剪辑投入到各大平台中即可,只要有了粉丝,就会有广告商找你接推广,新沂网今天要为大家带来

    互联网 日期:2021-03-18

  • 中国十大自媒体平台:今日头条山上榜,第三有热搜榜

      自媒体这份职业的局限性没有那么高,不需要你有超高的学历,也不需要你有过人的颜值和身材,就算是普通的大众也可以做,通过网络或者视频平台等途径,发布自己所做的视频,从而来吸引其他人来观看,新沂网今天要为大家盘点的是

    互联网 日期:2021-03-18

  • 同城配送平台排行榜:人人快送上榜,美团配送第三

      现在大家的生活越来越便捷,很多东西只需要在手机上轻松的下单,就会有专门的平台直接送到家门口,现在不仅有跨地域的快递,还有同城配送的平台,今天我们就来说一说同城配送平台。同城配送平台排行榜  1.蜂鸟即配  2.

    互联网 日期:2021-03-16

  • 十大画图软件排行榜:CorelDRAW上榜,PS第一

      说到画图,我们脑海里会浮现出一个人拿着颜色笔在画本上认真的作画,而这一次我们要说的是与传统的绘画相对的网上绘画,现在很多人都在学习在电脑上绘画,用各种软件画出各种逼真的图画。十大画图软件软件排行榜  1.Ad

    互联网 日期:2021-03-11

  • 十大免费自学网站:B站上榜,我要自学网第一

      随着互联网的繁荣,大家能够在网络上获取的资源也越来越多,很多人能够突破时间和空间的限制,获取自己所需要的各种只是资源,今天有很多人在网络上自主学习自己想要学习的知识。十大免费自学网站  1.我要自学网  2.

    互联网 日期:2021-03-10

  • 电脑杀毒软件十大排名:金山毒霸上榜,360杀毒第一

      很多人使用电脑都会隔一段时间杀一次毒,即使是你不杀毒,系统也会提醒你到了该杀毒的时候了,电脑杀毒之后运行的会更加通常,还可以避免一些病毒的攻击,今天就来说一说常用的杀毒软件。电脑杀毒软件十大排名  1.360杀

    互联网 日期:2021-03-10

  • 2019十大网络流行语:爱的魔力转圈圈上榜 第2李佳琦带火

      加入2019年快要3个月了,是时候先来和小编一起盘点一下2019十大网络流行语,有今年年初新出的爆红网络的流行词,2018十大网络流行语你都get了吗?还有些词从2018年一直火到2019年,新沂网小编会对2019年最新网络流行语进行

    互联网 日期:2021-03-10

互联网排行榜精选