我已经构建了一个爬虫程序,目前正在以600MB /天的速度遇到内存泄漏。我认为原因是数据库连接。 目前,我正在创建单个数据库连接作为静态方法,如下所示:
static
{
try
{
String hostname = PropertyReader.getProperty("hostname");
String port = PropertyReader.getProperty("port");
String dbname = PropertyReader.getProperty("dbname");
String username = PropertyReader.getProperty("username");
String password = PropertyReader.getProperty("password");
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://"+hostname+":"+port+"/"+dbname+"";
conn = DriverManager.getConnection(url, username, password);
System.out.println("conn built");
}
catch (SQLException e)
{
e.printStackTrace();
} catch (ClassNotFoundException e)
{
e.printStackTrace();
}
}
我在多种方法中使用此变量如下:
public static void getSeed()
public static void processPage(String URL)
用于检索数据并将数据插入数据库。
避免内存泄漏的最佳替代方法是什么?
答案 0 :(得分:3)
内存泄漏的最大原因是忘记关闭ResultSet和PreparedStatements。无法判断您是否在代码中的其他位置执行此操作,但如果您这样做,那就是我要开始的地方。
答案 1 :(得分:2)
以下是我的想法:
不同的线程不应共享单个连接。这将导致悲伤。设置连接池,然后配置文件。你可能会对泄漏出现的地方感到惊讶。