Why does this code sample produce a memory leak?
        Posted  
        
            by citronas
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by citronas
        
        
        
        Published on 2010-05-16T12:54:17Z
        Indexed on 
            2010/05/16
            13:00 UTC
        
        
        Read the original article
        Hit count: 265
        
In the university we were given the following code sample and we were being told, that there is a memory leak when running this code. The sample should demonstrate that this is a situation where the garbage collector can't work.
As far as my object oriented programming goes, the only codeline able to create a memory leak would be
items=Arrays.copyOf(items,2 * size+1); 
The documentation says, that the elements are copied. Does that mean the reference is copied (and therefore another entry on the heap is created) or the object itself is being copied? As far as I know, Object and therefore Object[] are implemented as a reference type. So assigning a new value to 'items' would allow the garbage collector to find that the old 'item' is no longer referenced and can therefore be collected.
In my eyes, this the codesample does not produce a memory leak. Could somebody prove me wrong? =)
import java.util.Arrays;
public class Foo  
{  
private Object[] items;  
private int size=0;  
private static final int ISIZE=10;
public Foo()  
{  
  items= new Object[ISIZE];  
}  
public void push(final Object o){  
  checkSize();  
  items[size++]=o;  
}  
public Object pop(){  
  if (size==0)  
    throw new ///...  
  return items[--size];  
}  
private void checkSize(){  
  if (items.length==size){  
    items=Arrays.copyOf(items,2 * size+1);  
  }  
}  
}
        © Stack Overflow or respective owner