Java: ¿Qué sucede cuando el objeto Connection se anula sin llamar a Connection.close()?

¿Qué sucede con la conexión establecida con la base de datos si una instancia de java.sql.Connection as con queda anulado.

con = null;

¿La conexión está cerrada o permanece abierta hasta que se ejecuta la aplicación?

2da pregunta:
Del mismo modo, si tiene una instancia de javax.mail.Store as store y anularlo,

store = null;

¿Se cerrará la conexión smtp o permanecerá sin cerrar? Gracias.

preguntado el 04 de julio de 12 a las 08:07

¿Qué clase de conexión? y publicar una pregunta a la vez -

3 Respuestas

Si configura su Connection a nulo, esta conexión permanecerá "abierta" y el código asociado con el cierre no se ejecutará. Por lo tanto, para cerrarlo, debe llamar al close() método. Si la conexión no se cierra, tampoco se liberarán otros recursos que la conexión pueda retener.

Respondido 04 Jul 12, 08:07

"el código asociado con el cierre no se ejecutará": no lo sabe. Que podría. Podría tener un método finalizar(). - user207421

Si usted hace su connection instancia nula sin llamar close() entonces,

connection estaría listo para ser recogido de basura

y no invocará el código que se requiere para hacer con close() implementación del método

Respondido 04 Jul 12, 08:07

"no invocará el código": no lo sabes. Que podría. Podría tener un método finalizar(). - user207421

Hay un método de finalización y es muy probable que la implementación concreta de Connection o Store anule este método y llame a close() allí. Por ejemplo, aquí hay un fragmento del controlador JDBC de PostgreSQL:

protected void finalize() throws Throwable
{
    if (openStackTrace != null)
        logger.log(GT.tr("Finalizing a Connection that was never closed:"), openStackTrace);

    close();
}

Este método se llamará cuando el recolector de basura decida que es hora de recolectar el objeto dado.

Pero se recomienda cerrar siempre las conexiones y recursos similares de forma manual, porque el recolector de basura es impredecible. Puede alcanzar el límite de conexión más rápido de lo que se iniciará el recolector de basura y liberar recursos, por ejemplo.

Respondido 04 Jul 12, 08:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.