java 内存泄漏 与 内存溢出

一:定义

  内存泄漏:(Memory Leak)  不再会被使用的对象的内存不能被回收,就是内存泄露

              强引用所指向的对象不会被回收,可能导致内存泄漏,虚拟机宁愿抛出OOM也不会去回收他指向的对象

                                                 意思就是你用资源的时候为他开辟了一块空间,当你用完时忘记释放资源了,这时内存还被占用着,一次没关系,但是内存泄漏次数多了就会导致内存溢出

  内存溢出:(Out Of Memory---OOM)  指程序申请内存时,没有足够的内存供申请者使用,或者说,给了你一块存储int类型数据的存储空间,但是你却存储long类型的数据,那么结果就是内存不够用,

                    此时就会报错OOM,即所谓的内存溢出,简单来说就是自己所需要使用的空间比我们拥有的内存大内存不够使用所造成的内存溢出

  内存的释放:即清理那些不可达的对象,是由GC决定和执行的,所以GC会监控每一个对象的状态,包括申请、引用、被引用和赋值等。释放对象的根本原则就是对象不会再被使用

二:内存泄漏的四种发生场景

java 内存泄漏 与 内存溢出

 

三:内存溢出的发生情况以及解决方案

java 内存泄漏 与 内存溢出

 

 

四:1)内存泄漏的第一个例子

java 内存泄漏 与 内存溢出

 

:2)内存泄漏的第二个例子

java 内存泄漏 与 内存溢出

 

:3)内存泄漏的第三个例子

java 内存泄漏 与 内存溢出

 

:4)内存泄漏的第四个例子

java 内存泄漏 与 内存溢出

 

 五:如何防止发生内存泄漏

  1:特别注意一些像HashMap、ArrayList的集合对象,它们经常会引发内存泄漏。当它们被声明为static时,它们的生命周期就会和应用程序一样长

  2:资源未关闭造成的内存泄漏 如没有调close()方法

 

上一篇:使用JProfiler 分析 OOM


下一篇:Java ThreadLocal 与 OOM