Estamos escribiendo una gran aplicación GUI en Scala con muchas clases, y hemos tenido que aumentar el espacio PermGen para poder cargar todas las clases. La aplicación en sí muestra una serie de actividades basadas en pantalla, cada una de las cuales carga su propio conjunto grande de clases. Solo una actividad se carga/muestra en cualquier momento. Después de pasar por un par de actividades, tuvimos un OutOfMemoryError
en el espacio de PermGen.Ahorro de espacio PermGen con varios cargadores de clases
Entiendo que el espacio PermGen es garbage collected just like the rest of the heap, pero estoy interesado en ver si puedo reducir el espacio PermGen necesario al tener, p. un ClassLoader
por actividad para permitir la descarga de clases.
Así:
- entiendo que las clases cargadas por el cargador de clases de sistema no pueden ser descargados, ya que siempre serán referenciados por su cargador de clases. ¿Es eso cierto?
- Si no hay más instancias de una clase cargada por mi cargador de clases personalizado, y el cargador de clases puede ser basura, ¿se descargarán sus clases, liberando espacio PermGen?
- ¿Hay alguna advertencia con respecto a (o errores comunes que evitarían) la descarga de clases?
¿Qué tan grande es su PermGen? –
128m es demasiado pequeño, 256m funciona por ahora, pero ¿por cuánto tiempo? ... –