So the stream wasn't actually doing anything smart

If I had workers I could consume from the stream, but that wasn't
valuable. I wanted everything in the stream to be started at once. A
whole pile of Futures, only executing some number of them at a time, and
then blocking on the results of them until it's all finished.

Using an iterator did this, because converting the lineStream to a List
of simpleSummoners instantiates all the futures immediately.

That's not the memory leak.
The memory leak was in threads. All the stdin reading threads were
attached to the stdin of the real process, and since that never closed
because the application was still running, they stayed around running
forever, leaking their memories and keeping byte arrays around. SO yeah
not attaching to stdin, because I want no stdin solves the problem