Я довольно часто использую статические переменные в своем приложении. Теперь, когда статус приложения закончен, я столкнулся с проблемой сбора мусора. Переменные, объявленные как статические, никогда не удаляются сборщиком мусора, и моя память быстро заканчивается.
Конкретная проблема связана с подключением к MySQL. Я храню переменную соединения в статической переменной, поэтому мне не нужно открывать соединение каждый раз, когда я запускаю запрос. Это приводит к проблеме использования всей памяти каждый раз, когда я использую переменную подключения для выполнения запроса, и используемая память не освобождается. Стоит ли хранить переменную соединения в статической переменной? Когда я пытался каждый раз открывать и закрывать соединение без статической переменной, я решал проблему с управлением памятью, но отзывчивость приложения замедлялась в 10-20 раз.
Вам нужно больше информации, чтобы понять эту проблему? Если да, пожалуйста, спросите меня без голосования. Спасибо!
EDIT
Это мой разъем класса
import java.sql.*;
public class connect {
public Connection conn = null;
public connect() {
try {
if (conn == null) {
String userName = "root";
String password = "password";
String url = "jdbc:mysql://localhost/pos?zeroDateTimeBehavior=convertToNull";
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection(url, userName, password);
System.out.println("Database connection established");
}
} catch (Exception e) {
System.err.println("Cannot connect to database server");
}
}
}
Это мой класс, где я храню соединение
public class variables {
public static connect con = new connect();
}
И этот метод я использую для выполнения запроса
public class mysql_query {
public static ResultSet execute_mysql(Connection con, String sqlStatement) {
try {
//ResultSet result = null;
java.sql.Statement cs = con.createStatement();
ResultSet result = cs.executeQuery(sqlStatement);
return result;
} catch (SQLException ex) {
Logger.getLogger(mysql_query.class.getName()).log(Level.SEVERE, null, ex);
return null;
}
}
public static void main(String args[]){
String sql = "SELECT * FROM pos_user_login WHERE moderator='1' AND "
+ "company_id='1'";
ResultSet rs = execute_mysql(variables.con.conn, sql);
}
}