You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sh...@apache.org on 2013/10/06 13:47:57 UTC
svn commit: r1529611 -
/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java
Author: shaie
Date: Sun Oct 6 11:47:56 2013
New Revision: 1529611
URL: http://svn.apache.org/r1529611
Log:
clean unused memory by SegmentReader
Modified:
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java
Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java?rev=1529611&r1=1529610&r2=1529611&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java Sun Oct 6 11:47:56 2013
@@ -47,6 +47,18 @@ import org.apache.lucene.util.RefCount;
*/
public final class SegmentReader extends AtomicReader {
+ private static final class DocValuesRefCount extends RefCount<DocValuesProducer> {
+
+ public DocValuesRefCount(DocValuesProducer object) {
+ super(object);
+ }
+
+ @Override
+ protected void release() throws IOException {
+ object.close();
+ }
+ }
+
private final SegmentInfoPerCommit si;
private final Bits liveDocs;
@@ -261,7 +273,7 @@ public final class SegmentReader extends
return genInfos;
}
- private RefCount<DocValuesProducer> newDocValuesProducer(SegmentInfoPerCommit si, IOContext context, Directory dir,
+ private RefCount<DocValuesProducer> newDocValuesProducer(SegmentInfoPerCommit si, IOContext context, Directory dir,
DocValuesFormat dvFormat, Long gen, List<FieldInfo> infos) throws IOException {
Directory dvDir = dir;
String segmentSuffix = "";
@@ -272,12 +284,7 @@ public final class SegmentReader extends
// set SegmentReadState to list only the fields that are relevant to that gen
SegmentReadState srs = new SegmentReadState(dvDir, si.info, new FieldInfos(infos.toArray(new FieldInfo[infos.size()])), context, segmentSuffix);
- return new RefCount<DocValuesProducer>(dvFormat.fieldsProducer(srs)) {
- @Override
- protected void release() throws IOException {
- object.close();
- }
- };
+ return new DocValuesRefCount(dvFormat.fieldsProducer(srs));
}
@Override
@@ -302,6 +309,10 @@ public final class SegmentReader extends
}
}
}
+ genDVProducers.clear();
+ dvProducers.clear();
+ docValuesLocal.close();
+ docsWithFieldLocal.close();
if (t != null) {
if (t instanceof IOException) throw (IOException) t;
if (t instanceof RuntimeException) throw (RuntimeException) t;