java memory finalizer proxool

es la pérdida de memoria? por qué java.lang.ref.Finalizer consume tanta memoria



memory proxool (2)

Algunas clases implementan el método Object.finalize() . Los objetos que anulan este método deben ser llamados por un finalizador de llamadas de fondo y no pueden limpiarse hasta que esto ocurra. Si estas tareas son cortas y no descarta muchas de ellas, todo funciona bien. Sin embargo, si está creando muchos de estos objetos y / o sus finalizadores toman mucho tiempo, se acumula la cola de objetos para finalizar. Es posible que esta cola use toda la memoria.

La solucion es

  • no use finalize () d objetos si puede (si está escribiendo la clase para el objeto)
  • finalice muy brevemente (si tiene que usarlo)
  • no deseche tales objetos cada vez (intente reutilizarlos)

La última opción es la mejor para usted ya que está usando una biblioteca existente.

Ejecuté un volcado de pila en mi programa. Cuando lo abrí en la herramienta del analizador de memoria, encontré que el java.lang.ref.Finalizer para org.logicalcobwebs.proxool.ProxyStatement ocupaba mucha memoria. ¿Por qué esto es tan?


Por lo que puedo entender, Proxool es un grupo de conexión para conexiones JDBC. Esto me sugiere que el problema es que su aplicación está haciendo un uso indebido del grupo de conexiones. En lugar de llamar de close a los objetos de declaración, es probable que su código los elimine y / o sus conexiones principales. Proxool confía en los finalizadores para cerrar los objetos subyacentes implementados por el controlador ... pero esto requiere esas instancias de Finalizer. También podría significar que está causando la conexión para abrir / cerrar conexiones de bases de datos (reales) con más frecuencia de la necesaria, y eso sería perjudicial para el rendimiento.

Por lo tanto, le sugiero que compruebe su código para detectar los objetos ResultSet, Statement y / o Connection filtrados, y asegúrese de cerrarlos en los bloques finally .

En cuanto al volcado de memoria, espero que te preocupen dónde van los 898,527,228 bytes. La gran mayoría son retenidos por el objeto Finalizer cuyo id es 2aab07855e38 . Si todavía tiene el archivo de volcado, eche un vistazo a lo que se refiere el Finalizer . Parece más problemático que los objetos de Proxool.