Index: lucene/CHANGES.txt =================================================================== --- lucene/CHANGES.txt (revision 945228) +++ lucene/CHANGES.txt (working copy) @@ -391,6 +391,9 @@ addition, all of IndexComnmit methods which threw UnsupportedOperationException are now abstract. (Shai Erera) +* LUCENE-2467: Fixed memory leak in IndexWriter when large documents + are indexed. (Mike McCandless) + New features * LUCENE-2128: Parallelized fetching document frequencies during weight Index: lucene/src/java/org/apache/lucene/index/ReusableStringReader.java =================================================================== --- lucene/src/java/org/apache/lucene/index/ReusableStringReader.java (revision 945228) +++ lucene/src/java/org/apache/lucene/index/ReusableStringReader.java (working copy) @@ -43,6 +43,8 @@ left -= len; return len; } else if (0 == left) { + // don't keep a reference (s could have been very large) + s = null; return -1; } else { s.getChars(upto, upto+left, c, off); Index: lucene/src/java/org/apache/lucene/index/DocumentsWriter.java =================================================================== --- lucene/src/java/org/apache/lucene/index/DocumentsWriter.java (revision 945228) +++ lucene/src/java/org/apache/lucene/index/DocumentsWriter.java (working copy) @@ -1314,11 +1314,14 @@ } /* Return byte[]'s to the pool */ + @Override void recycleByteBlocks(byte[][] blocks, int start, int end) { synchronized(DocumentsWriter.this) { - for(int i=start;i blocks) { synchronized(DocumentsWriter.this) { final int size = blocks.size(); - for(int i=0;i