Per En términos generales, no consideraría a PermGen como una parte especial del montón.
Prefiero pensar en heap como un área de memoria dedicada a almacenar instancias de objetos mientras que PermGen es un área dedicada a las definiciones de clase de tienda. Como resultado, el ciclo de vida de un montón está vinculado a una aplicación, mientras que el ciclo de vida de PermGen está vinculado a una JVM.
Uno de los mejores ejemplos de por qué una aplicación y su JVM pueden tener un ciclo de vida diferente se encuentra en un contenedor Java EE. En un servidor de aplicaciones, las aplicaciones se pueden implementar y deshacer sin reiniciar el servidor. Durante la desinstalación (o reasignación), es fácil liberar todas las instancias de objetos, es decir, el espacio dinámico, pero es bastante complicado borrar todas las clases cargadas por esta aplicación desde PermGen porque la JVM aún puede hacer referencia a algunas de las clases.
Uno de estos casos es el Leaking Drivers. Cuando se implementa una aplicación, se carga un controlador JDBC y se registra con DriverManager. Cuando esta aplicación no está desplegada, el DriverManager permanece encendido y contiene una referencia al controlador, su cargador de clases original y todo lo que este cargador de clases cargó. Como resultado, se crea una pérdida de memoria en PermGen, pero no es culpa de la administración de la memoria de la aplicación.
Es cierto que las JVM como JRocket no tienen PermGen en absoluto, todo está almacenado en el montón. Solo en ese contexto puede llamar a PermGen una "parte especial" de Heap. Incluso entonces, aún deberíamos ver PermGen y Heap de forma diferente ya que tienen un propósito muy diferente y tienen tipos muy diferentes de pérdidas de memoria.
Actualización: En Oracle JDK 8, PermGen es replaced by "Metaspace" y ahora es oficialmente parte del montón. No necesitaremos sintonizar PermGen específicamente más.
El enlace que usted dio dice "segmento del montón", ¿realmente es "una parte especial de la pila"? Tendría mucho más sentido que sea una parte del montón (o incluso algún tipo de segmento de datos estáticos) en lugar de la pila que simplemente no es adecuada para ese tipo de cosas. –
Es una parte especial del montón. Edité mi respuesta antes de comentar, pero aprecio la corrección de todos modos :) – Olhovsky
¿Alguna recomendación sobre la segunda pregunta? – Gareth