我开发了一个网络爬虫。Web scraper 使用 6 个线程,每个线程打开一个网页,获取文章的文本,然后将文本的每个单词写入(使用驱动程序)到 mysql 数据库中。
在程序执行期间,我得到一个 java mysql java.lang.OutOfMemoryError: Java heap space。我在Eclipse上安装了Memory Analyzer,发现问题是由mysql驱动连接引起的:当我运行这个程序时,5分钟后驱动占用的内存是6 MB,再过5分钟200MB,再过5分钟500Mb和然后我得到java错误堆空间。
我不明白为什么会这样。
这是我用于模型的代码(访问 mysql DB)
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
public class model {
private Connection connect = null;
public model(){
try {
Class.forName("com.mysql.jdbc.Driver");
connect = DriverManager.getConnection("jdbc:mysql://localhost/system?user=keyword_tool&password=l0gripp0");
} catch (Exception e) {
System.out.println(e);
}
}
public synchronized void insertCat(String parola, String categoria){
try{
PreparedStatement statement = connect.prepareStatement("insert into sostantivi (nome, categoria) values (?, ?)");
statement.setString(1, parola);
statement.setString(2, categoria);
statement.executeUpdate();
statement.close();
} catch (Exception e){
//System.out.println(e);
}
}
public void closeDBConnection() {
try {
connect.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
每个线程只需调用方法 insertCat 并在数据库中插入一个带有类别的单词。
Eclipse 的 Memory Analyzer 插件说: