Asignación de segmentos de memoria JVM

Bien, tengo una pregunta con respecto a los segmentos de memoria de una JVM, sé que cada JVM elegiría implementar esto un poco diferente, pero es un concepto general que debería permanecer igual en todas las JVM

Un programa C / C ++ estándar que no utiliza una máquina virtual para ejecutar durante el tiempo de ejecución tiene cuatro segmentos de memoria durante el tiempo de ejecución. El sistema operativo asigna automáticamente todos estos segmentos de memoria durante el tiempo de ejecución.

Sin embargo, cuando una JVM ejecuta un programa compilado de Java, durante el tiempo de ejecución tiene 5 segmentos de memoria

El área Método / Montón / Pilas Java / Registros de PC / Pilas nativas

Mi pregunta es esta, ¿quién asigna y administra esos segmentos de memoria? El sistema operativo NO tiene conocimiento de que un programa Java se está ejecutando y piensa que es parte de la JVM que se ejecuta como un programa regular en la computadora, compilación JIT, uso de pilas Java, estas operaciones requieren asignación de memoria en tiempo de ejecución, y lo que soy no entender Es cómo una JVM divide su memoria en esos segmentos de memoria. Definitivamente no lo hace el sistema operativo, y esos segmentos de memoria (por ejemplo, las pilas de Java) deben ser contiguos para funcionar, por lo que si el programa JVM simplemente usaría un comando como malloc para recibir el tamaño máximo de acumule memoria y divida esa memoria en segmentos, no tenemos ninguna promesa de memoria contigua, me encantaría que alguien pudiera ayudarme a aclarar esto, está todo mezclado ...

Respuestas a la pregunta(1)

Su respuesta a la pregunta