Skip to content

Commit d1c9b07

Browse files
committed
One more GC-related improvement, need 0.7.1 build
1 parent 24be25b commit d1c9b07

File tree

2 files changed

+9
-13
lines changed

2 files changed

+9
-13
lines changed

release-notes/VERSION

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Version: 0.7.0
1+
Version: 0.7.1
22

33
Release date:
44
29-May-2012
@@ -15,5 +15,4 @@ Fixes:
1515
=== History: ===
1616
------------------------------------------------------------------------
1717

18-
2.0.2 (16-May-2012)
1918

src/main/java/com/fasterxml/sort/Sorter.java

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -225,9 +225,11 @@ public boolean sort(DataReader<T> inputReader, DataWriter<T> resultWriter)
225225
inputReader.close();
226226
_phase = SortingState.Phase.SORTING;
227227
_writeAll(resultWriter, items);
228-
} else {
229-
// but if more data than memory-buffer-full, do it right:
230-
List<File> presorted = presort(inputReader, buffer, items, next);
228+
} else { // but if more data than memory-buffer-full, do it right:
229+
List<File> presorted = new ArrayList<File>();
230+
presorted.add(_writePresorted(items));
231+
items = null; // it's a big array, clear refs as early as possible
232+
_presort(inputReader, buffer, next, presorted);
231233
inputClosed = true;
232234
inputReader.close();
233235
_phase = SortingState.Phase.SORTING;
@@ -312,21 +314,16 @@ private Object[] _readMax(DataReader<T> inputReader, SegmentedBuffer buffer,
312314
return buffer.completeAndClearBuffer(segment, ptr);
313315
}
314316

315-
protected List<File> presort(DataReader<T> inputReader,
316-
SegmentedBuffer buffer,
317-
Object[] firstSortedBatch, T nextValue) throws IOException
317+
protected void _presort(DataReader<T> inputReader, SegmentedBuffer buffer, T nextValue,
318+
List<File> presorted)
319+
throws IOException
318320
{
319-
ArrayList<File> presorted = new ArrayList<File>();
320-
presorted.add(_writePresorted(firstSortedBatch));
321-
// important: clear out the ref to let possibly sizable array to be GCed
322-
firstSortedBatch = null;
323321
do {
324322
Object[] items = _readMax(inputReader, buffer, _config.getMaxMemoryUsage(), nextValue);
325323
Arrays.sort(items, _rawComparator());
326324
presorted.add(_writePresorted(items));
327325
nextValue = inputReader.readNext();
328326
} while (nextValue != null);
329-
return presorted;
330327
}
331328

332329
protected File _writePresorted(Object[] items) throws IOException

0 commit comments

Comments
 (0)