é o programa que interpreta os arquivos .class do java. Como java é interpretado (diferente de linguagens como C) ele precisa de alguma coisa que entenda os byte codes (arquivos .class) e é isso que a máquina virtual faz! Ela também tem funções como coleta de lixo e tratamento de exeções de tempo de execução