Alocação de segmentos de memória JVM

Tudo bem, então eu tenho uma pergunta sobre os segmentos de memória de uma JVM, eu sei que toda JVM escolheria implementar isso um pouco diferente, mas é um conceito geral que deve permanecer o mesmo em todas as JVMs

Um programa C / C ++ padrão que não usa uma máquina virtual para executar durante o tempo de execução possui quatro segmentos de memória durante o tempo de execução. O Código / Pilha / Pilha / Dados todos esses segmentos de memória são alocados automaticamente pelo Sistema Operacional durante o tempo de execução.

No entanto, quando uma JVM executa um programa compilado Java, durante o tempo de execução, possui 5 segmentos de Memória

A área Método / Heap / Pilhas Java / Registradores de PC / Pilhas Nativas

Minha pergunta é essa: quem aloca e gerencia esses segmentos de memória? O sistema operacional NÃO está ciente de um programa java em execução e pensa que faz parte da JVM sendo executado como um programa regular no computador, compilação JIT, uso de pilhas Java, essas operações requerem alocação de memória em tempo de execução. falha em entender É como uma JVM divide sua memória nesses segmentos de memória. Definitivamente, isso não é feito pelo sistema operacional e esses segmentos de memória (por exemplo, as pilhas java) devem ser contíguos para funcionar, portanto, se o programa JVM simplesmente usar um comando como malloc para receber o tamanho máximo de amontoar memória e dividir essa memória em segmentos, não temos promessa de memória contígua, eu adoraria se alguém pudesse me ajudar a entender isso direito na minha cabeça, está tudo misturado ...

questionAnswers(1)

yourAnswerToTheQuestion