内存泄漏:应用程序中保留了从不会再被使用的引用,引用未被释放,GC无法工作.
这是一个Simple Stack,
如果先增长,后压缩,会出现内存泄漏.
移除最后一个元素,array[length-1];
数组可用元素变为0到length-2,
最后一个为不再使用元素,但引用被保留在数组中,未被释放.
[color=red]总结:一个类自己管理内存,就应该小心内存泄漏的问题了;一但一个元素被释放了,则该元素中包含的任何对象引用应该要被清空.[/color]
import java.util.*;
public class Test
{
private Object[] objs;
private int count;
public Test(int size) {
objs = new Object[size];
count = 0;
}
public void addEle(Object obj) {
objs[count] = obj;
count++;
}
public Object removeLastEle() {
if (count == 0) {
throw new RuntimeException("the stack is empty...");
}
Object obj = objs[--count];
//objs[count] = null;
return obj;
}
public String toString() {
return Arrays.toString(objs);
}
public Object[] getArray() {
return objs;
}
public int getSize() {
return count;
}
public static void main(String[] args) {
Test test = new Test(3);
test.addEle("one");
test.addEle("two");
test.addEle("three");
//test.addEle("foure");
System.out.println(test);
System.out.println(test.removeLastEle());
System.out.println(test.getSize());
System.out.println(test);
}
}
这是一个Simple Stack,
如果先增长,后压缩,会出现内存泄漏.
removeLastEle()
移除最后一个元素,array[length-1];
数组可用元素变为0到length-2,
最后一个为不再使用元素,但引用被保留在数组中,未被释放.
[color=red]总结:一个类自己管理内存,就应该小心内存泄漏的问题了;一但一个元素被释放了,则该元素中包含的任何对象引用应该要被清空.[/color]