Java - использование памяти и несколько экземпляров jar - PullRequest
0 голосов
/ 23 июня 2011

В настоящее время я работаю с 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 Ответ

2 голосов
/ 23 июня 2011

Из Java Tutorial о MongoDB

Экземпляр объекта Mongo фактически представляет пул соединений с базой данных;вам понадобится только один объект класса Mongo даже с несколькими потоками.Для получения дополнительной информации см. Страницу документа одновременность .

Обнуление ссылок и вызов System.gc не гарантирует освобождение или сбор мусора вообще.Более подробную информацию см. в этом вопросе .

Мой совет: используйте только один экземпляр Mongo на ВМ, остальные будут обрабатываться автоматически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...