Я использую MySQL и Java, чтобы выбрать около 50000 записей.Странно то, что когда я использую ResultSet и метод next () для чтения данных, я вижу, что использование RAM моего приложения Java увеличивается во время выборки.он начинается с 255 МБ и увеличивается до 379 МБ!код, который я использую здесь:
try {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/#mysql50#crawler - used in report?" + "user=root&password=&useUnicode=true&characterEncoding=UTF-8");
Statement st = conn.createStatement();
ResultSet rsDBReader = st.executeQuery("SELECT Id, Content FROM DocsArchive");
while (rsDBReader.next()) {
int docId = rsDBReader.getInt(1);
String content = rsDBReader.getString(2);
. . .
}
rsDBReader.close();
st.close();
conn.close();
} catch (Exception e) {
System.out.println("Exception in reading data: " + e);
}
Я уверен, что использование памяти для ResultSet, а не для других частей программы.В этой программе мне не нужно обновлять записи, поэтому я хочу удалить каждую запись после окончания работы.Я предполагаю, что прочитанные записи не будут удалены, и программа не освободит их память.поэтому я использовал некоторые уловки, чтобы избежать этого, например, используя следующий код:
Statement st = conn.createStatement( ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY, ResultSet.CLOSE_CURSORS_AT_COMMIT);
st.setFetchSize(500);
rsDBReader.setFetchSize(500);
, но они ничего не изменили.: (
Поэтому мне нужен какой-то метод, который удаляет (освобождает) память из строк, которые были прочитаны.
Еще один интересный момент заключается в том, что даже после завершения функции и закрытия ResultSet, Statement и Connectionи, переходя к другой части программы, использование памяти программы не уменьшается! Спасибо