Итак, я пытаюсь оптимизировать приложение Java, которое использует библиотеку java sql для чтения и записи с удаленного сервера SQL.(это для проекта).
Мы ограничены следующими библиотеками:
com.mysql.*
java.io.*
java.lang.*
java.sql.*
java.text.*
java.util.*
javax.sql.*
И у нас есть ограничение памяти 8 МБ на нашей JVM.
Способкод устанавливается прямо сейчас, для каждой функции, которой требуется доступ к базе данных, создается и закрывается новое соединение.например:
public static void Read()
{
Connection connection = NULL;
try {
connection = DriverManager.getConnection(EnvManager.getDbUrl());
Statement statement = connection.createStatement();
statement.setFetchSize(Integer.MIN_VALUE);
******* FUNCTION ********
}finally {
if(connection != null) {
try {
connection.close();
} catch (Exception e) {
}
}
}
public static void Write()
{
Connection connection = NULL;
try {
connection = DriverManager.getConnection(EnvManager.getDbUrl());
Statement statement = connection.createStatement();
statement.setFetchSize(Integer.MIN_VALUE);
******* FUNCTION ********
}finally {
if(connection != null) {
try {
connection.close();
} catch (Exception e) {
}
}
}
и т. д.
Я пытаюсь установить постоянное соединение, чтобы я мог либо передать объект соединения, то есть
...
...
Connection connection = NULL;
try {
connection = DriverManager.getConnection(EnvManager.getDbUrl());
Read(connection);
Write(connection);
}finally {
if(connection != null) {
try {
connection.close();
} catch (Exception e) {
}
}
...
...
Однако, когда я пытаюсь сделать это, всякий раз, когда я пытаюсь записать, а затем прочитать большой файл в базу данных (что-либо более 5 МБ), моя JVM продолжает выдавать ошибки, которые исчерпаны в памяти.
Мой вопрос в основном, что происходит, когда вы создаете один объект подключения и продолжаете передавать его в функцию?Кажется, что он каким-то образом растет или размножается каждый раз, когда его используют.
Я посмотрел на этом сайте:
http://benjchristensen.com/2008/05/27/mysql-jdbc-memory-usage-on-large-resultset/
В котором предлагалось использовать функцию statement.setFetchSize(Integer.MIN_VALUE);
для сокращения JVM-буферизации всего набора результатов в памяти по умолчанию, но это не помогло.
Любые идеи о том, как решить эту проблему, будут высоко оценены, спасибо.