虽然java自身带有一个垃圾回收器gc。但是这个gc只是在适当的时候,当某个对象不再使用,也就是不再被引用时,才会想相应的对象。但有些时候,有些对象的引用可能就会情不自禁的忘记断开引用,而一直处于一种引用的状态,虽然我们已经不用了,但是gc还是无法回收。这个样子迟早会导致堆栈内存的溢出,这个时候就需要我们的手动的把应用断开,为gc回收内存创造机会。这往往更体现了代码的严谨性。
下面自己手动实现的一个MyStack类,这个类中的pop方法就是要特别注意的。这个栈的底层是维护的一个Object[]数组:
1 class StackList 2 { 3 Object[] elements; 4 int index = 0; //当前的索引值 5 public StackList() { 6 this.elements = new Object[3]; 7 } 8 //添加内容 9 public void add(Object o) 10 { 11 //添加元素之前应当先检查当前的容量是否够用 12 ensureCapacity(); 13 elements[index ++] = o; 14 } 15 //出站操作 16 public Object pop() 17 { 18 int tmpIndex = --index; 19 Object o = elements[tmpIndex]; 20 elements[tmpIndex] = null; //不用的要赶紧释放 断开引用为 gc回收创造条件 21 return o; 22 } 23 24 //检查当前数组的容量是搜狗用 25 public void ensureCapacity() 26 { 27 if(index == elements.length) 28 { 29 int newLength = elements.length*2; 30 elements = Arrays.copyOf(elements, newLength); 31 } 32 } 33 //获取 当前于都个数 34 public int size() 35 { 36 return index; 37 } 38 }