Java - 内存使用& jar的多个实例

时间:2011-06-23 12:38:19

标签: java jar mongodb

我目前正在使用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
    }
}

1 个答案:

答案 0 :(得分:2)

来自Java Tutorial about MongoDB

  

Mongo对象实例   实际上代表了一个池   与数据库的连接;你会   只需要Mongo类的一个对象   即使有多个线程。见   concurrency doc页面了解更多信息   信息。

取消引用并调用System.gc并不保证释放或垃圾收集任何资源。有关详细信息,请参阅this question

我的建议:每个虚拟机只使用一个Mongo实例,其余的将自动处理。