сборщик мусора использует недетерминированный подход ... т.е. вы никогда не будете знать, когда он будет работать ... вы можете запросить его, но никогда не будете уверены, что он запустится, как только вы его вызовете ...
пример, который вы указали для массива, будет очищен из памяти только в том случае, если в вашей программе нет абсолютно никаких ссылок, или после выполнения всех из них он исчерпал все ссылки на себя, но вы не можете быть уверены,когда эта память будет освобождена ...
вы можете думать о сборщике мусора как о ленивом ... но, зачем винить в этом, ведь он делает всю грязную работу по уборке;)