Después de una implementación reciente en la prueba del sistema, uno de nuestros servlets era golpeado mucho más fuerte de lo habitual y notamos que la memoria comenzaba a subir y weblogic finalmente moriría. Mi pasante, estaba muy orgulloso, descubrí la fuente de la pérdida de memoria.JAXBContext.newInstance memory leak
Siempre que llega una petición, esta línea se llama a:
JAXBContext jc = JAXBContext.newInstance(“ruby.oracle_servlet.schemas”);
Por alguna razón, el objeto nunca se vuelve basura recogida. Una vez que lo hicimos estático y lo movimos donde lo inicializamos, nuestra pérdida de memoria desapareció.
Otro de nuestros desarrolladores puso simplemente esa línea en un ciclo while en la aplicación java independiente y también vio subir y bajar la memoria.
¿Alguien tiene alguna idea de por qué ese objeto no se recoge basura?
Gracias
Enlace actualización: http://jaxb.java.net/guide/Performance_and_thread_safety.html –
@ThangPham - Gracias, He actualizado mi respuesta con el nuevo enlace que ha proporcionado. –
¿Es esto también un problema conocido con el lanzamiento de JAXB para Java 7? La solución que dio aún se mantendría, pero sería bueno saber si esto es algo que hay que vigilar activamente. –