我目前正在使用 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
}
}
最佳答案
The Mongo object instance actually represents a pool of connections to the database; you will only need one object of class Mongo even with multiple threads. See the concurrency doc page for more information.
清空引用并调用System.gc
并不能保证释放或垃圾收集任何资源。更多信息请参见 this question .
我的建议:每个虚拟机仅使用一个 Mongo
实例,其余的将自动处理。
关于Java - 内存使用和多个 jar 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6454115/