No hay un único asignador de memoria para la JVM. IIRC correctamente la JVM de Sun y la memoria administrada de IBM de manera diferente. Sin embargo, en general, la forma en que funcionará la JVM es que inicialmente asignará una pieza de memoria, este segmento será lo suficientemente pequeño como para vivir en la memoria caché de los procesadores, lo que hace que todo el acceso sea extremadamente rápido.
Como dentro de la aplicación crea objetos, los objetos tomarán memoria desde dentro de este segmento. La asignación de objetos dentro del segmento es simplemente aritmética del puntero.
Inicialmente, la dirección de desplazamiento en el segmento recién acuñado será cero. El primer objeto asignado tendrá una 'dirección' (en realidad una compensación en el segmento) de cero. Cuando asigna un objeto, el administrador de memoria sabrá cuán grande es el objeto, asignará ese espacio dentro del segmento (16 bytes dicen) y luego incrementará su "dirección de desplazamiento" en esa cantidad, lo que significa que la asignación de memoria es deslumbrante, solo puntero aritmética.
Sun tienen un libro blanco aquí http://java.sun.com/j2se/reference/whitepapers/memorymanagement_whitepaper.pdf e IBM solía tener un montón de cosas en ibm.com/developerworks
Una JVM típica sólo utilizará el sistema operativo para añadir más memoria a la pila. La mayoría de las veces está reutilizando lo que ya tiene. –