1 .内存泄漏
在Java中,内存泄漏就是存在一些被分配的对象,无法释放这些内存。
这些对象有下面两个特点:
- 首先,这些对象是可达的,即在有向图中,存在通路可以与其相连(也就是说仍存在该内存对象的引用);
- 其次,这些对象是无用的,即程序以后不会再使用这些对象。
如果对象满足这两个条件,这些对象就可以判定为Java中的内存泄漏,这些对象不会被GC所回收,然而它却占用内存。
2 .内存溢出
程序无法申请到足够的内存空间。
3 .二者关联
内存泄漏最终会导致内存溢出。
4 .堆溢出实验
/**
* 堆溢出
*/
public class Heap{
public static void main(String[] args){
ArrayList list=new ArrayList();
while(true){
list.add(new Heap());
}
}
}
报错:java.lang.OutOfMemoryError: Java heap space
5 .栈溢出实验
/**
* 栈溢出
*/
public class Stack{
public static void main(String[] args){
new Stack().test();
}
public void test(){
test();
}
}
报错:java.lang.StackOverflowError