가비지 컬렉팅을 하는 시점은 크게 3가지 입니다.
1. 한개의 문단이 종료되었을경우 스텍메모리를 리턴하면서 가비지컬렉팅을 같이 합니다.
2. 시스템에서 주기적으로 가비지 컬렉팅을 합니다. (일정 메모리를 초과하면 수거 대상을 산출하여 gc를 시행합니다... 기준이 이래서 상당히 비 주기적이라고 보시면 됩니다.)
3. 새로운 메모리 할당이 필요한데 사용 가능한 빈 메모리가 없을때 강제로 시행합니다.
간단하게 말하자면 가비지 컬렉팅의 대상에서 벗어나는 경우는
1. 객체가 변수에 대입되어 있는경우 (레퍼런싱도 마찬가지 입니다)
2. 각종 리스너가 달려있는경우
이며
가비지 컬렉팅의 대상이 되게 만들려면 말씀하신것처럼null을 대입하거나 리스너를 제거하시면 됩니다.
정확한 개념은
http://aroundck.tistory.com/entry/Garbage-Collection-GC-%EA%B0%80-%EB%AD%90-%ED%95%98%EB%8A%94-%EB%85%80%EC%84%9D%EC%9D%B8%EC%A7%80-%ED%95%9C-%EB%B2%88-%ED%95%B4%EB%B6%80%ED%95%B4%EB%B3%B4%EC%9E%90
블로그에 상세하고 정확하게 서술되어있습니다.
심지어 순환참조까지 캐치해서 GC 해준다니 null값을 어사인 하지 않았다고 해서 GC가 되지 않거나 하진 않는것 같습니다.