2011-06-23 66 views
0

我目前正在使用Java,MongoDB和多個線程。Java - 內存使用情況和jar的多個實例

對於每個線程,我運行MongoDB連接。

private Mongo m; 
m = new Mongo(); 

我當時一看與頂部的內存使用情況,我看到的MongoDB Jar多個實例(調用庫蒙戈-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 
    } 
} 

回答

2

Java Tutorial about MongoDB

蒙戈對象實例 實際上代表的 連接到數據庫的池;即使有多個線程,您將只需要一個類Mongo 的對象即 。有關更多 信息,請參閱 concurrency文檔頁面。

歸零引用和調用System.gc不保證釋放或垃圾回收任何資源。有關毛皮的更多信息,請參閱this question

我的建議:每個虛擬機只使用一個Mongo的實例,其餘的將自動處理。