标签:
堆(Heap)是Java存放对象实例的地方。
堆溢出可以分为以下两种情况,这两种情况都会抛出OutOfMemoryError:java heap space异常:
内存泄漏是指对象实例在新建和使用完毕后,仍然被引用,没能被垃圾回收释放,一直积累,直到没有剩余
内存可用。
如果内存泄露,我们要找出泄露的对象是怎么被GC ROOT引用起来,然后通过引用链来具体分析泄露的原因。
分析内存泄漏的工具有:Jprofiler,visualvm等。
内存溢出是指当我们新建一个实力对象时,实例对象所需占用的内存空间大于堆的可用空间。
如果出现了内存溢出问题,这往往是程序本生需要的内存大于了我们给虚拟机配置的内存,这种情况下,我们可以采用调大-Xmx来解决这种问题。
/**
* @author z
* 堆溢出
*/
public class Heap
{
public static void main(String[] args)
{
ArrayList list=new ArrayList();
while(true)
{
list.add(new Heap());
}
}
}
栈溢出
原因
1> 函数调用层次过深,每调用一次,函数的参数、局部变量等信息就压一次栈。
2> 局部静态变量体积太大
/**
* @author z
* 栈溢出
*/
public class Stack
{
public static void main(String[] args)
{
new Stack().test();
}
public void test()
{
test();
}
}
标签:
原文地址:http://www.cnblogs.com/amei0/p/4507784.html