java内存泄漏测试

来源:互联网 发布:sql语句的关键字 编辑:程序博客网 时间:2024/04/29 04:28

昨天看书的时候看到了一个关于java的内存泄漏的问题,所以就自己照着写了这个程序,拿出来分享,反正我自己觉得有问题,还望各位大神来帮我看看 ,如果不是内存泄漏。给我一个例子。。谢谢。。


public class SelfStack {

private  int size=0;
private Object[] elements;

public Object[] getElements() {
return elements;
}


public void setElements(Object[] elements) {
this.elements = elements;
}


public SelfStack(int capability)
{

elements=new Object[capability];
}

public void push(Object object)
{
ensureCapability();
elements[size++]=object;
}

public Object pop()
{


return elements[--size];

}

public int getSize() {
return size;
}



public void ensureCapability(){
if(size==elements.length)
{
Object[] newElements=elements;
elements=new Object[2*elements.length];
System.arraycopy(newElements, 0, elements, 0, size);
}
}

}


public void testStack() //内存泄漏测试。。。。
{
SelfStack stack=new SelfStack(10);

for(int i=0;i<11;i++)
{
String s="asd";
stack.push(s);
}
System.out.println(stack.getElements().length);     //20
System.out.println(stack.getSize());                           //11
System.out.println(stack.getElements()[stack.getSize()-1]);
stack.pop();
System.out.println(stack.getSize());                        //10

if(stack.getElements()[10]!=null)
{
System.out.println("内存溢出了。。。。");
}
}
}

我的看法是:这好像不是一个内存泄漏,问题主要是出在size,size貌似只是一个游标,并没有什么特殊的含义。。各位觉得呢。。。

这个栈保持了一个对弹出对象的引用,并没有呗java垃圾回收掉。。还忘各位好好帮我看看。。

解决方案:(书上说的:)

public Object pop()
{
      Object result=elements[--size];
      elements[size]=null;
return result;

}

原创粉丝点击