我目前正在使用Java,MongoDB和几个线程。
对于每个线程,我运行MongoDB连接。
private Mongo m;
m = new Mongo();
我查看了TOP的内存使用情况,我看到了MongoDB Jar
的多个实例(调用库mongo-2.6.3.jar)。我尝试在每个线程的处理结束后用以下方法销毁它:
m.close();
m = null;
System.gc();
但是在我的程序停止之前,没有任何实例仍在内存中。
有什么想法吗?感谢。
好的,我已经对本教程做了一些测试,但不是很成功。 事实上,我有:
public class process {
public static Mongo m;
public static DB db;
public process() {
m = new Mongo();
//for each database
threadDatabase thread = new threadDatabase(database);
thread.start();
}
}
public class threadDatabase extends Thread {
public threadDatabase (String database) {
this.database = database;
}
public void run() {
process.db.requestStart();
processDatabase(this.database);
process.db.requestDone();
}
private boolean processDatabase(String dbname) {
process.db = process.m.getDB(dbname);
//getting data on the dedicated database
}
}
答案 0 :(得分:2)
Mongo对象实例 实际上代表了一个池 与数据库的连接;你会 只需要Mongo类的一个对象 即使有多个线程。见 concurrency doc页面了解更多信息 信息。
取消引用并调用System.gc
并不保证释放或垃圾收集任何资源。有关详细信息,请参阅this question。
我的建议:每个虚拟机只使用一个Mongo
实例,其余的将自动处理。