Я очень новичок в использовании драйвера подключения jtds. Я написал приложение, которое читает около 2500 больших xml и обрабатывает SQL-запросы и запускается с SQL-сервером. Я видел, что, когда я достигаю определенного количества xml, у меня не работает программа. Я проверил свой файл дампа phd в eclipse с помощью анализатора памяти и обнаружил, что net.sourceforge.jtds.jdbc.cache.SimpleLRUCache занимает много памяти. Я подключаюсь к SQL-серверу один раз и поддерживаю соединение до тех пор, пока не сброшу все мои запросы. Ниже приведен мой код для запуска запросов к серверу. Я не знаю, как получить дескриптор класса net.sourceforge.jtds.jdbc.cache.SimpleLRUCache, поскольку у него есть ясный метод, который, я думаю, может очистить кеш. Снова я не очень хорошо разбираюсь в драйверах jtds. Может ли кто-нибудь помочь мне решить эту проблему?net.sourceforge.jtds.jdbc.cache.SimpleLRUCache вызывает утечку памяти
public boolean runQueries(String query){
if (getConn() != null && query != null) {
Statement statement = null;
try {
long start = System.currentTimeMillis();
try {
if(log.isLoggable(Level.FINEST)){
log.finest("Processing: "+query);
}
statement = getConn().createStatement();
statement.executeUpdate(query);
} catch (Exception e) {
if(log.isLoggable(Level.FINEST)){
log.log(Level.SEVERE, "Failed to process query: "
+ query, e);
}else{
String reportQuery = query.length() > MAX_CHARS_DISPLAY ? query.substring(0,MAX_CHARS_DISPLAY)+"..." : query;
log.log(Level.SEVERE, "Failed to process query: "
+ reportQuery , e);
}
}finally{
if(statement != null){
try {
statement.close();
} catch (SQLException e) {
log.log(Level.SEVERE,"Failed to close statement: ",e);
}
}
}
long end = System.currentTimeMillis();
return true;
}finally{
if(statement != null){
try {
statement.close();
} catch (SQLException e) {
log.log(Level.SEVERE,"Failed to close statement: ",e);
}
}
}
}
return false;
}
Спасибо, Джон. Это решило мою проблему. –