序言

java中比较爽的就是 具有自由回收垃圾的功能,这让你在编写代码更加容易。但是这不能成为你不注意内存管理的理由。上例子

  1. public class Stack {
  2. private Object[] elements;
  3. private int size = 0;
  4. private static final int DEFAULT_SIZE = 16;
  5. public void push(Object obj) {
  6. ensureCapacity();
  7. elements[size++] = obj;
  8. }
  9. public Object pop(){
  10. if(size==0)
  11. throw new EmptyStackException();
  12. return elements[--size];
  13. }
  14. private void ensureCapacity() {
  15. if (elements.length == size) {
  16. elements = Arrays.copyOf(elements, size + (size >> 1));
  17. }
  18. }
  19. }

程序中隐藏着一个问题,那就是内存泄漏就是在这一块

  1. public Object pop(){
  2. if(size==0)
  3. throw new EmptyStackException();
  4. return elements[--size];
  5. }

每次取完后 elements的元素后并没有把没有用的对象给清除掉。当次类使用频繁的时候,会造成许许多多的对象被排除在垃圾回收机制之外,从而对性能造成比较大的影响。
其实可以进行一个简单的修复,就可以解决这个问题

  1. public Object pop(){
  2. if(size==0)
  3. throw new EmptyStackException();
  4. Object result= elements[--size];
  5. elements[size]=null;
  6. return result;
  7. }

清空对象引用应该是一种例外,而不是一种规范。
一般来说只要是类自己管理内存,就应该去思索会不会导致内存泄漏的问题。