Como he tenido que empaparme de su funcionamiento, aprovecho y pongo un post sobre conceptos básicos de la memoria en Java.
Para empezar, Java divide la memoria en dos segmentos bien diferenciados:
- Heap: Objetos del usuario, variables, ...
- Non-Heap/Perm: Código, metadatos, ...
La que más nos interesa es la Heap, porque es la que podemos "controlar". A la memoria Non-Heap (Perm) se le puede configurar el tamaño con el comando MaxPermSize. Pero esto sólo es útil si la aplicación va a cargar o generar dinámicamente muchas clases diferentes.