Вот пример, если интересно:
public class MemTest
{
private static boolean gc = false;
public MemTest(Object[] store)
{
store[0] = this; //Сохраняем ссылку на объект
throw new RuntimeException(); //Бросаем исключение
}
public static void main(String[] args)
{
Object[] store = new Object[1]; //Создаём хранилище
try
{
new MemTest(store); //Пытаемся создать объект
}
catch(Exception e)
{
System.out.println("Exception");//Произошло исключение
System.out.println("Object: " + store[0]); //Имеем ссылку на объект не null
//Убиваем ссылку, чтобы объект ыл доступен мусорщику
store[0] = null;
}
//Пока объект не собран
while(!gc)
{
try
{
Thread.sleep(200);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
// Пытаемся разбудеить GC
System.gc();
}
}
//Метод вызывается перед тем как объект будет удален из памяти.
protected void finalize() throws Throwable
{
System.out.println("Collecting...");
gc = true;
}
}