Today, the only way to have IndexWriter free up some heap is to invoke refresh or flush or close it, but these are all quite costly, and do much more than simply "move bytes to disk".
I think we should add a simple API, e.g. "move the biggest in-memory segment to disk" to 1) give more granularity (there could be multiple in-memory segments), and 2) only move bytes to disk (not refresh, not fsync, etc.).
This way apps that want to be more careful on how heap is used can have more control.