Java - 内存使用和多个 jar 实例

标签 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
    }
}

最佳答案

来自Java Tutorial about MongoDB

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/

相关文章:

spring - 我怎样才能哄 Spring Data 向我展示 mongo 的查询计划(又名 cursor.explain())

java - 使用 XStream 中的属性反序列化 XML 文本元素

java - 多态性java - 不去特定的功能

java - getParcelableArrayList 返回一个 Parcelable,但我需要它来返回我的对象​​。 (java 安卓)

JAVA:包含jar中的文件以及如何访问它们

java - 在 Cucumber Rails 应用程序中安装 Java 应用程序

java - 在 Mockito mock 方法中将 JSONObject 作为参数

java - 如何使用 eclipse 将类路径添加到导出的可运行 java .jar 文件

java - Morphia - 更改与集合关联的类

javascript - 无法从 ipfs.util.addFromFS 收集回调响应