精华内容
下载资源
问答
  • java内存溢出和内存泄漏区别
    2021-06-15 16:47:09

    内存溢出和内存泄漏的区别

    只针对JAVA来说

        内存泄露本意是申请的内存空间没有被正确释放,导致后续程序里这块内存被永远占用(不可达),而且指向这块内存空间的指针不再存在时,这块内存也就永远不可达了,内存空间就这么一点点被蚕食,

    借用别人的比喻就是:比如有10张纸,本来一人一张,画完自己擦了还回去,别人可以继续画,现在有个坏蛋要了纸不擦不还,然后还跑了找不到人了,如此就只剩下9张纸给别人用了,这样的人多起来后,最后大家一张纸都没有了。

    内存溢出是指存储的数据超出了指定空间的大小,这时数据就会越界,举例来说,常见的溢出,是指在栈空间里,分配了超过数组长度的数据,导致多出来的数据覆盖了栈空间其他位置的数据,这种情况发生时,可能会导致程序出现各种难排查的异常行为,

    或是被有心人利用,修改特定位置的变量数据达到溢出攻击的目的。而Java中的内存溢出,一般指【OOM:发生位置】这种Error,它更像是一种内存空间不足时发生的错误,并且也不会导致溢出攻击这种问题,举例来说,

    堆里能存10个数,分了11个数进去,堆就溢出了1个数,JVM会检测、避免、报告这种问题,所以虽然实际上JVM规避了内存溢出带来的问题,但在概念上来说,它确实是溢出才导致的,只是Java程序员在看到这个问题时,

    脑袋里的反应会是“内存不够了,咋回

    更多相关内容
  • 主要介绍了简单了解JAVA内存泄漏和溢出区别及联系,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 主要从以下几部分来说明,关于内存和内存泄露溢出的概念,区分内存泄露和内存溢出;内存的区域划分,了解GC回收机制;重点关注如何去监控发现内存问题;此外分析出问题还要如何解决内存问题。下面就开始本篇的...
  • 内存泄露 (memory leak)是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。 内存泄漏最终会导致内存溢出。 如何避免内存溢出? ...
  • 对于一个用 python 实现的,长期运行的后台服务进程来说,如果内存持续增长,那么很可能是有了“内存泄露”。 1、内存泄露的原因 对于 python 这种支持垃圾回收的语言来说,怎么还会有内存泄露? 概括来说,有以下三...
  • 主要介绍了内存溢出和内存泄漏的详解及区别的相关资料,需要的朋友可以参考下
  • 内存泄露和内存溢出区别

    千次阅读 2021-11-17 08:51:12
    一、什么是内存溢出和内存泄露 内存泄漏(memory leak):是指程序在申请内存后,无法释放已申请的内存空间,导致系统无法及时回收内存并且分配给其他进程使用。通常少次数的内存无法及时回收并不会到程序造成什么...

    一、什么是内存溢出和内存泄露

    内存泄漏(memory leak):是指程序在申请内存后,无法释放已申请的内存空间,导致系统无法及时回收内存并且分配给其他进程使用。通常少次数的内存无法及时回收并不会到程序造成什么影响,但是如果在内存本身就比较少获取多次导致内存无法正常回收时,就会导致内存不够用,最终导致内存溢出。
    2、内存溢出 (out of memory)::指程序申请内存时,没有足够的内存供申请者使用,导致数据无法正常存储到内存中。也就是说给你个int类型的存储数据大小的空间,但是却存储一个long类型的数据,这样就会导致内存溢出。

    二、内存溢出和内存泄露的关系以及区别

    1.关系:内存泄露最终会导致内存溢出,由于系统中的内存是有限的,如果过度占用资源而不及时释放,最后会导致内存不足,从而无法给所需要存储的数据提供足够的内存,从而导致内存溢出。导致内存溢出也可能是由于在给数据分配大小时没有根据实际要求分配,最后导致分配的内存无法满足数据的需求,从而导致内存溢出。

    2.区别:内存泄露是由于GC无法及时或者无法识别可以回收的数据进行及时的回收,导致内存的浪费;内存溢出是由于数据所需要的内存无法得到满足,导致数据无法正常存储到内存中。内存泄露的多次表现就是会导致内存溢出。

    展开全文
  • java jvm 内存溢出和内存泄漏区别

    千次阅读 2020-06-08 22:57:31
    文章目录一、概念的区分二、内存溢出的原因以及解决方法2.1、内存溢出的原因2.2、内存溢出的解决方案:三...内存泄露 memory leak ,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内

    1、概念的区分

    1.1、 内存泄露 memory leak

    程序运行结束后,没有释放 所占用的内存空间。

    一次内存泄漏 似乎不会有大的影响,但内存泄漏 不断累积,最终可用内存会变得越来越少。

    在这里插入图片描述

    比如说,总内存大小是100 MB,有40MB的内存一直无法回收,那么可用的只有60MB 。这40MB的就是内存泄漏。

    内存泄漏,就是 程序运行结束后,没有释放的内存。

    1.2、内存溢出 out of memory

    程序运行时,在申请内存空间时,没有足够的内存空间供其正常使用,程序运行停止,并抛出 out of memory

    比如程序运行时申请了一个10MB 空间, 但是当前可用内存只有5MB,程序无法正常执行,这就是内存溢出。

    在这里插入图片描述

    内存溢出 ,可以理解为 程序运行需要的内存 大于当前可用的内存。

    1.3 举例

    1)单例模式中,单例的生命周期和应用程序是一样长的,所以单例程序中如果持有对外部对象的引用的话,那么这个外部对象是不能被回收的,则会导致 内存泄露 的产生。

    2)一些提供close的资源未闭导致 内存泄漏 。数据库连接(dataSource.getConnection() ),网络连接(socket)和 IO流的连接必须在finally中 close,否则不能被回收的。

    3)读取大文件,一次读取的文件大于可用内存,会导致 内存溢出 。可用内存是1G,怎么读取2G的文件呢?建一个100MB的字节数组,读10次。

    2、二者的区别和联系:

    2.1、区别

    内存泄露: 程序运行结束后,所占用的内存没有全部释放。

    内存溢出:程序运行时,需要的内存大于当前可用的内存, 内存不足,程序无法继续执行,抛出 “内存溢出”,程序运行中断,结束。

    2.2、联系

    一次 内存泄露 可能对程序运行没有明显的影响,多次 内存泄露 最终会导致 内存溢出

    比如总内存大小是100MB,一次程序运行结束有,有10MB 没有释放,当前可用内存还有90MB,程序还可以运行。但是多次运行后, 可用内存 最终为0, 没有可以内存或内存不足时,程序在下一次运行时,会因为内存不足,而出现 内存溢出

    3、内存溢出的原因以及解决方法

    3.1、内存溢出的原因

    引起内存溢出的原因有很多种,小编列举一下常见的有以下几种:

    1. 内存中加载的数据量过于庞大,如一次从数据库取出过多数据;
    2. 集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;
    3. 代码中存在死循环或循环产生过多重复的对象实体;
    4. 使用的第三方软件中的BUG;
    5. 启动参数内存值设定的过小 。

    3.2、内存溢出的解决方案:

    第一步,修改JVM启动参数,直接增加内存。(-Xms-Xmx 参数一定不要忘记加)

    第二步,检查错误日志,查看 “OutOfMemory” 错误前是否有其它异常或错误。

    第三步,对代码进行走查和分析,找出可能发生内存溢出的位置。

    重点排查以下几点:

    1.检查对数据库查询中,是否有一次获得全部数据的查询。
    	一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。
    	这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,
    	数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。
     
    2.检查代码中是否有死循环或递归调用。
    
    3.检查是否有大循环重复产生新对象实体。
    
    4.检查对数据库查询中,是否有一次获得全部数据的查询。
    	一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。
    	这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,
    	上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。
    
    5.检查List、MAP等集合对象是否有使用完后,未清除的问题。
    	List、MAP等集合对象会始终存有对对象的引用,使得这些对象不能被GC回收。
    

    第四步,使用内存查看工具动态查看内存使用情况。

    4、转载

    https://www.cnblogs.com/Sharley/p/5285045.html

    展开全文
  • jvm内存除了程序计数器不会发生内存溢出,其余的都可能存在内存溢出。 1. 内存溢出(Out Of Memory) ...是程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后..

    jvm内存除了程序计数器不会发生内存溢出,其余的都可能存在内存溢出。

    1. 内存溢出(Out Of Memory)

    是程序在申请内存时,没有足够的内存空间供其使用。比如:你需要10M的空间,内存空间只剩8M,这就会出现内存溢出。
    以栈举例:栈满时在做进栈必定产生空间溢出,叫上溢,栈空时在做退栈也产生空间溢出,称为下溢。就是分配的内存不足以放下数据项序列,称为内存溢出。

    2. 内存泄漏  (Memory Leak)

    是程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重。memory leak最终会导致out of memory。
    这块内存不释放,就不能再用了,就叫这块内存泄漏了。

    内存泄漏分类

    以发生的方式来分类,内存泄漏可以分为4类: 
    1. 常发性内存泄漏。发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。 
    2. 偶发性内存泄漏。发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的也许就变成了常发性的。所以测试环境和测试方法对检测内存泄漏至关重要。 
    3. 一次性内存泄漏。发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块仅且一块内存发生泄漏。比如,在类的构造函数中分配内存,在析构函数中却没有释放该内存,所以内存泄漏只会发生一次。 
    4. 隐式内存泄漏。程序在运行过程中不停的分配内存,但是直到结束的时候才释放内存。严格的说这里并没有发生内存泄漏,因为最终程序释放了所有申请的内存。但是对于一个服务器程序,需要运行几天,几周甚至几个月,不及时释放内存也可能导致最终耗尽系统的所有内存。所以,我们称这类内存泄漏为隐式内存泄漏。

    从用户使用程序的角度来看,内存泄漏本身不会产生什么危害,作为一般的用户,根本感觉不到内存泄漏的存在。
    真正有危害的是内存泄漏的堆积,这会最终消耗尽系统所有的内存。从这个角度来说,一次性内存泄漏并没有什么危害,因为它不会堆积,而隐式内存泄漏危害性则非常大,因为较常发性和偶发性内存泄漏它更难被检测到。

    3.内存溢出的原因及解决方案:

    修改JVM启动参数,直接增加内存。
    检查错误日志,查看“OutOfMemory”错误前是否有其它异常或错误。
    对代码进行走查和分析,找出可能发生内存溢出的位置。
    使用内存查看工具动态查看内存使用情况。

    4.出现内存溢出和内存泄露,重点排查几点:

    1、检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条以上记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询,查多少字段用多少字段。
    2、检查代码中是否有死循环或递归调用。
    3、检查是否有大循环重复产生新对象实体。
    4、检查List、MAP等集合对象是否有使用完后,未清除的问题。List、MAP等集合对象会始终存有对对象的引用,使得这些对象不能被GC回收。使用list.clear()或者map.clear()

    展开全文
  • 主要介绍了Android内存溢出内存泄漏原因进行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 内存泄漏和内存溢出有啥区别

    千次阅读 2021-07-20 15:56:16
    1、内存泄漏(Memory Leak):是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。 2、内存溢出(Memory Overflow):指程序申请内存时,没有足够...
  • Android中的内存泄漏和内存溢出

    千次阅读 2021-12-09 15:45:20
    一、内存溢出和内存泄漏的概念理解 **内存溢出:**是指程序代码片段被执行申请内存时,没有足够的内存空间,导致OOM异常。 OOM:即内存溢出,out of momery。 Android系统为每一个应用程序申请的内存是有限的(为什么...
  • 内存泄漏:是指程序在申请内存后,无法释放已经申请的内存空间。 一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。...内存泄露会最终会导致内存溢出! 虚拟机针对每一个应用都会分配
  • 一、什么是内存溢出和内存泄露 内存泄漏(memory leak):是指程序在申请内存后,无法释放已申请的内存空间,导致系统无法及时回收内存并且分配给其他进程使用。通常少次数的内存无法及时回收并不会到程序造成什么...
  • 1、内存泄漏memory leak :是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。 2、内存溢出 out of memory :指程序申请内存时,没有足够的内存...
  • JVM——内存溢出和内存泄漏区别

    千次阅读 2018-12-02 21:57:26
    今日本帅博主在研究JVM,今天我们就来游走于内存溢出内存泄漏之间,且看看它们是个啥,且又有啥子区别。 1.内存溢出和内存泄漏是啥 内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用...
  • 内存溢出和内存泄漏区别

    千次阅读 2019-07-17 22:09:46
    这个很重要,是开发中经常会遇到的问题。现在总结如下: ...内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少...
  • JAVA内存泄漏和内存溢出区别和联系

    万次阅读 多人点赞 2018-03-14 17:25:04
    JAVA内存泄漏和内存溢出区别和联系 1、内存泄漏memory leak : 是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。 2、内存溢出 out ...
  • 内存泄漏是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。 2.内存溢出(out of memory 简称:OOM) 指程序申请内存时,没有足够的内存供...
  • 内存泄漏和内存溢出区别与解决方式

    万次阅读 多人点赞 2018-07-20 08:19:25
    内存泄露 :是指程序在申请内存后,无法释放已申请的内存空间就造成了内存泄漏,一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。 我们知道了内存泄漏的原因而内存溢出则有可能是因为我们...
  • 浅谈Java内存泄漏和内存溢出区别

    千次阅读 2019-04-03 19:15:00
    浅谈Java内存泄漏和内存溢出区别 内存溢出 out of memory是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory 内存泄露 memory leak是指程序在申请内存后,无法释放已申请的内存空间,一次内存...
  • JAVA中的内存溢出和内存泄漏分别是什么,有什么联系和区别,我谈谈自己的理解。内存泄漏(memoryleak):申请了内存不释放,比如100m的内存,分配了10m的内存一直不回收,那么可以用的内存只有90m了,仿佛泄露掉了一...
  • 详解Java的内存溢出和内存泄漏
  • 内存溢出 out of memory...内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。memory leak会最终会导致out...
  • 一、内存泄漏和内存溢出区别内存溢出 out of memory:是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出内存溢出通俗...
  • 内存溢出和内存泄漏

    2022-04-13 17:27:26
    一、内存溢出相对于内存泄漏来说,尽管更容易被理解,但是同样的,内存溢出也是引发程序崩溃的罪魁祸首之一。 二、由于GC一直在发展,所有一般情况下,除非应用程序占用的内存增长速度非常快,造成垃圾回收已经跟不...
  • 内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。 memory leak会最终会导致out of memory! 内存溢出...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 73,394
精华内容 29,357
关键字:

内存泄露和溢出的区别