Estou com duvidas em relação a essas memorias queria saber qual a importância
que ela tem no programa.
a memoria heap da jvm é a memoria que ela aloca para executar o programa, ela meio que rouba esse espaço da memoria para subir o programa, isso independe se ela vau usar de fato esse espaço todo ou não, isso é configuravel.
dentro desse espaço de memoria ela aloca espaço para controlar o ciclo de vida dos objetos do seu programa ele aloca espaços diferentes para objetos que tem vida curta e objetos que tem vida long ou objetos que nunca vão ser destruídos na execução do programa.
Não sei exatamente porque foi criado mas percebendo por cima, é nítido o ganho de performance com o coletor de lixo ao definir que ele não irá tentar executar o seu processo na memoria de objetos permanentes(permagem), eu também acredito que ele(o coletor de lixo GC) execute o processo de limpeza com menos frequência no espaço de memoria de objetos com vida mais longa.
Tem muito tempo que estudei sobre isso, espero ter ajudado, recomendo da uma pesquisada na internet se quiser se aprofundar mais e também usar o jconsole(apenas execute jconsole na linha de comando) ele mostra a gerencia de processos e memoria da jvm.