Webスクレイパーを開発しました。Web スクレーパーは 6 つのスレッドを使用し、各スレッドは Web ページを開き、記事のテキストを取得し、(ドライバーを使用して) mysql データベースにテキストの各単語を書き込みます。
プログラムの実行中に、Java mysql java.lang.OutOfMemoryError: Java heap space が発生します。Eclipse に Memory Analyzer をインストールしたところ、問題の原因は mysql ドライバー接続であることがわかりました。このプログラムを実行すると、5 分後にドライバーが占有する RAM は 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 プラグインには次のように書かれています。