It's unlikely that the amount of memory reported by spectre in the spectre.out is relevant here. What's likely to be the limiting factor is the memory taken by the waveforms that are being read into memory after each simulation and are used to create your "100 byte" summary of the run.
Most likely the garbage collection of the waveform point data is not being triggered, and hence the memory used by the waveforms is not being reused - until too late. This happened because what was being monitored was the waveform and vector objects, not the point data itself, and whilst the memory for the points themselves was reclaimed, it was only triggered if you'd used up all the available waveform/vector slots. This has been significantly improved in IC615 - so if you can use IC615 that would be a good solution.
Unfortunately there's no easy (general purpose) solution in IC614.