В моем приложении произошла утечка памяти в результате использования JDBC.Я проверил это, посмотрев на визуальный дамп кучи и увидев тысячи экземпляров ResultSet и связанных объектов.Мой вопрос, таким образом, как мне правильно управлять ресурсами, используемыми JDBC, чтобы они могли собирать мусор?Нужно ли вызывать «.close ()» для каждого используемого оператора?Нужно ли вызывать «.close ()» для самих ResultSets?
Как бы вы освободили память, используемую при вызове:
ResultSet rs = connection.createStatement().executeQuery("some sql query");
??
Я вижу, что есть и другие, очень похожие вопросы.Извините, если это излишне, но я либо не совсем слежу за ответами, либо они не применяются повсеместно.Я пытаюсь получить авторитетный ответ о том, как управлять памятью при использовании JDBC.
:: EDIT :: Добавление некоторых примеров кода
У меня есть класс, который в основном является помощником JDBC, который яиспользовать для упрощения взаимодействия с базой данных, два основных метода предназначены для выполнения вставки или обновления и для выполнения операторов выбора.
Этот для выполнения операторов вставки или обновления:
public int executeCommand(String sqlCommand) throws SQLException {
if (connection == null || connection.isClosed()) {
sqlConnect();
}
Statement st = connection.createStatement();
int ret = st.executeUpdate(sqlCommand);
st.close();
return ret;
}
И этоодин для возврата ResultSets из выбора:
public ResultSet executeSelect(String select) throws SQLException {
if (connection == null || connection.isClosed()) {
sqlConnect();
}
ResultSet rs = connection.createStatement().executeQuery(select);
return rs;
}
После использования метода executeSelect () я всегда вызываю resultset.getStatement (). close ()
Examiningдамп кучи с отслеживанием выделения объектов в операторах show, которые все еще удерживаются обоими этими методами ...