2015-05-27 4 views
4

Скажите, я использую подключение к базе данных с именем con (или сокет или что-нибудь еще, что Closable). Что происходит после close()? Значит ли con равен null или в нем что-то еще? И в чем разница между con.close() и con = null?Правильное использование close() и = null для объектов Closable

ответ

5

Когда вы вызываете close, объект должен освобождать все ресурсы, которые он использует за кулисами. В случае примера java.sql.Connection, это будет одна из двух вещей:

  • Бесплатно любое физическое подключение к базе данных, тем самым освобождая ресурсы. Это происходит, когда вы открываете соединение с базой данных вручную, например. DriverManager.getConnection(...).
  • Перейдите в состояние SLEEPING и подождите, чтобы его снова вызвали. Это происходит, когда Connection обрабатывается DataSource, который обрабатывается пулом подключений к базе данных.

Установка объекта con = null просто присваивает null значение переменной, ссылка будет по-прежнему жив, пока сборщик мусора не решит удалить его. Тем не менее, установка Connection на nullне вызывает метод close, поэтому вы можете иметь утечки памяти.

В качестве лучшей практики, вы должны ВСЕГДА вызов close метод на случаи Closeable или использовать try-with-resources (доступны с Java 7), чтобы убедиться, что ресурс (ы) является (являются) всегда закрыты.

+0

Сказал это лучше, чем я. +1 –

+1

(Установка переменных в нуль практически никогда не требуется, FWIW.) –