import java.util.EmptyStackException;
public class Stack1
{
private Object[] elements;
private int size = 0;
public static void main(String[] args) throws InterruptedException
{
Stack1 s1 = new Stack1(2);
s1.push(new String("This is a test of a potential memory leak scenario"));
s1.push(new String("This is a test of a potential memory leak scenario"));
s1.push(new String("This is a test of a potential memory leak scenario"));
s1.push(new String("This is a test of a potential memory leak scenario"));
s1.push(new String("This is a test of a potential memory leak scenario"));
printMemoryInfo(1);
s1.pop();
printMemoryInfo(2);
s1.pop();
printMemoryInfo(3);
s1.pop();
printMemoryInfo(4);
s1.pop();
printMemoryInfo(5);
Thread.sleep(3000);
printMemoryInfo(10);
}
private static void printMemoryInfo(int i)
{
System.out.println(i);
System.out.println("total: " + Runtime.getRuntime().totalMemory() );
System.out.println("free : " + Runtime.getRuntime().freeMemory() );
}
public Stack1(int initialCapacity)
{
this.elements = new Object[initialCapacity];
}
public void push(Object o)
{
ensureCapacity();
elements[size++] = o;
}
public Object pop()
{
if ( size == 0 ) throw new EmptyStackException();
return elements[--size];
}
private void ensureCapacity()
{
if ( elements.length == size )
{
Object[] oldElements = elements;
elements = new Object[2*elements.length+1];
System.arraycopy(oldElements,0,elements,0,size);
}
}
}
|