内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;
内存泄露 memory leak,是指无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成的内存空间的浪费称为内存泄露!根本原因是,长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,尽管短生命周期对象已经不再需要,但是因为长生命周期对象持有它的引用而导致不能被回收,这就是java中内存泄露的发生场景。。
memory leak会最终会导致out of memory!
例;对象o已经无用 ,但集合依旧持有对它的引用,造成GC无法对o进行回收,导致内存泄漏,即该块内存空间不可用。
持续进行下去,内存就会被一点一点蚕食,直到某次执行
new Object()时,没有足够内存空间可用,抛出java.lang.OutOfMemoryError异常。
public class OutDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<Object> list = new ArrayList<>();
while(true) {
Object o = new Object();
list.add(o);
o = null;
}
}
}
控制台输出结果: