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?es una pérdida de memoria? Por qué java.lang.ref.Finalizer consume tanta memoria
Respuesta
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 solución es
- no utilice finalize (d) los objetos si se puede (si está escribiendo la clase para el objeto)
- hacer ultimar muy corto (si tiene que usarlo)
- no descartan tales objetos cada vez que (tratar de volver a usarlos)
La última opción es probable que sea mejor para usted que está utilizando una biblioteca existente.
Opción n.º 4: evite el uso de bibliotecas que (sobre) usan finalizadores. –
Una variación de la opción n. ° 1;) –
tal vez el problema sea la causa del hilo del Finalizador. una clase anula el método finalizado, causa que el Finalizer enrute el bloqueo muerto – fuyou001
Por lo que puedo entender, Proxool es un grupo de conexiones 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 al close
en 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 el código de los objetos filtrados ResultSet, Statement y/o Connection, y asegúrese de cerrarlos en los bloques finally
.
En cuanto al volcado de memoria, espero que le preocupe 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 qué se refiere al que hace referenciaFinalizer
. Parece más problemático que los objetos de Proxool.
gracias, pero no puedo encontrar la causa de la encuesta de conexión JDBC memoy leak – fuyou001
Bueno, tampoco puedo a menos que vea su código fuente. (Y no estoy preparado para pasar mi tiempo investigando de todos modos ...) –
- 1. ¿Por qué los navegadores usan tanta memoria?
- 2. ¿Por qué lxml.etree.iterparse() consume toda mi memoria?
- 3. ¿Por qué el código JIT consume tanta memoria que el código compilado o interpretado?
- 4. ¿Por qué mi aplicación Silverlight usa tanta memoria no administrada?
- 5. ¿por qué este código causa una pérdida de memoria?
- 6. ¿Por qué agoto tanta memoria cuando leo un archivo en la memoria en Perl?
- 7. ¿Por qué las aplicaciones de Cocoa usan tanta memoria?
- 8. ¿Por qué el tren de cuidados ocupa tanta memoria?
- 9. ¿Por qué mi Perl Regex usa tanta memoria?
- 10. ¿Por qué cargar este archivo requiere tanta memoria?
- 11. ¿Es esto una pérdida de memoria?
- 12. ¿Es esto una pérdida de memoria?
- 13. Java consume demasiada memoria
- 14. ¿Por qué mi programa Winforms reserva tanta memoria virtual?
- 15. ¿Por qué esto crea una pérdida de memoria (iPhone)?
- 16. ¿Por qué este código produce una pérdida de memoria?
- 17. Knockout.js consume demasiada memoria
- 18. ¿Por qué hay una pérdida de memoria y cómo solucionarlo?
- 19. pérdida de memoria GETIPFROMHOST
- 20. Sin memoria Problema de pérdida de memoria
- 21. ¿Por qué un programa Java vacío consume memoria?
- 22. ¿Por qué la JVM consume menos memoria que -Xs especificados?
- 23. CheckedListBox pérdida de memoria
- 24. GetOracleDecimal pérdida de memoria
- 25. ¿Una variable en sí misma consume memoria?
- 26. CMSampleBufferRef pérdida de memoria
- 27. ¿`Using Namespace;` consume más memoria?
- 28. JNA pérdida de memoria
- 29. phpDocumentor alternativa consume menos memoria
- 30. Table NewRow() Causa pérdida de memoria
El enlace de "imágenes" va a lo que parece ser su perfil de Twitter. –
@ R.MartinhoFernandes Se trata de una imagen que ha alojado en twitter, creo. – Oliver