Aplicação utilizando muita memória

Fiz uma aplicação em linguagem JAVA, ela esta funcionando tudo certo, porém, reparei pelo gerenciador de tarefas do windows que ela usa muita memória, e as vezes ela da a louca e começa a aumentar memória.

Em várias partes do sistema, eu chamo o:

 System.gc(); 
 System.runFinalization(); 

Segundo o que pesquisei, estes comandam forçam a chamada do Garbage Collector.

Também uso um:

finally{ 
     this.pst.close(); 
     this.rs.close(); 
} 

depois de fazer comunicação com o banco de dados (USO PostgreSQL).

Minha dúvida é a seguinte, mesmo fazendo todos estes processos, a aplicação ainda usa muito memória (na média de 90MB).
Teria algum programa ou alguma forma de eu descobrir o que esta ocupando tanta memória na minha aplicação?

Analise os processos de uma forma isolada, é uma aplicação web? desktop? chamadas ao System.gc() muitas vezes pode ser pior dependendo do algoritimo GC que esta rodando(versão do Java), mas em muitos casos o gasto excessivo de memória é problema no próprio código, você também comenta que tem comunicação com o banco de dados, todos sabemos o quanto é caro esses recursos, esta fazendo um bom gerenciamento desses recursos? liberando eles pós uso? existem muitos patterns que ajudam, então é necessário ter bom conhecimento nas ferramentas utilizadas no projeto.