MongoDB游标(OutOfMemory)中的内存泄漏?

这就是我正在阅读我的大型MongoDB表(每个对象在其属性中都有非常大的数据块):

DBCursor cursor = collection.find(/* my query */); while (cursor.hasNext()) { DBObject object = cursor.next(); doSomething(object); // no data stays in memory } cursor.close(); 

我越来越:

 java.lang.OutOfMemoryError: Java heap space at java.lang.StringCoding$StringDecoder.decode(Unknown Source) at java.lang.StringCoding.decode(Unknown Source) at java.lang.String.(Unknown Source) at org.bson.BasicBSONDecoder$BSONInput.readUTF8String(BasicBSONDecoder.java:463) at org.bson.BasicBSONDecoder.decodeElement(BasicBSONDecoder.java:155) at org.bson.BasicBSONDecoder._decode(BasicBSONDecoder.java:79) at org.bson.BasicBSONDecoder.decode(BasicBSONDecoder.java:57) at com.mongodb.DefaultDBDecoder.decode(DefaultDBDecoder.java:56) at com.mongodb.Response.(Response.java:83) at com.mongodb.DBPort.go(DBPort.java:124) at com.mongodb.DBPort.call(DBPort.java:74) at com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:286) at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:257) at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:310) at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:295) at com.mongodb.DBCursor._check(DBCursor.java:368) at com.mongodb.DBCursor._hasNext(DBCursor.java:459) at com.mongodb.DBCursor.hasNext(DBCursor.java:484) 

处理200-300个对象后抛出exception。 驱动程序是否在内存中保存数据? 我正在使用

  org.mongodb mongo-java-driver 2.10.1  

驱动程序在内存中保存的对象数取决于游标的批量大小。 如果没有明确设置,我不确定默认的批量大小是什么。 根据文档的最大大小和可用的堆空间量,您应相应地设置批处理大小。 请记住,MongoDB支持的当前最大文档大小为16MB。

有关详细信息,请参阅MongoDB Java驱动程序API文档中的DBCursor.batchSize() 。