A coleta de lixo numa JVM é o processo que automaticamente limpa objetos que não são mais referenciados pelo programa: o espaço em heap utilizado por aquela instância precisa ser reciclado para o uso de novos objetos, contribuindo para também para a sua integridade e não fragmentação do heap.
A coleta de lixo é feita em thread própria, mas pode ser invocada explicitamente pelos métodos System.gc() e Runtime.gc().
Uma definição acadêmica da estrutura de dados Heap ("monte" é a tradução mais próxima) pode ser encontrada em http://books.google.com.br/books?id=7ogOGQ9VMBAC&lpg=PA313&dq=heap%20java&pg=PA303#v=onepage&q=heap%20java&f=false, sendo que o uso dessa estrutura particular é interessante por seu desempenho.
Sobre o coletor de lixo nas JVM, gostei deste artigo:
http://www.javaworld.com/javaworld/jw-08-1996/jw-08-gc.html