序言
java中比较爽的就是 具有自由回收垃圾的功能,这让你在编写代码更加容易。但是这不能成为你不注意内存管理的理由。上例子
public class Stack {private Object[] elements;private int size = 0;private static final int DEFAULT_SIZE = 16;public void push(Object obj) {ensureCapacity();elements[size++] = obj;}public Object pop(){if(size==0)throw new EmptyStackException();return elements[--size];}private void ensureCapacity() {if (elements.length == size) {elements = Arrays.copyOf(elements, size + (size >> 1));}}}
程序中隐藏着一个问题,那就是内存泄漏就是在这一块
public Object pop(){if(size==0)throw new EmptyStackException();return elements[--size];}
每次取完后 elements的元素后并没有把没有用的对象给清除掉。当次类使用频繁的时候,会造成许许多多的对象被排除在垃圾回收机制之外,从而对性能造成比较大的影响。
其实可以进行一个简单的修复,就可以解决这个问题
public Object pop(){if(size==0)throw new EmptyStackException();Object result= elements[--size];elements[size]=null;return result;}
清空对象引用应该是一种例外,而不是一种规范。
一般来说只要是类自己管理内存,就应该去思索会不会导致内存泄漏的问题。
