Description

This came up in discussion on IRC yesterday. The +RTS -M<size> flag does two things:

it starts tuning the GC to be more frugal as we get closer to <size>, by enabling in-place compaction and making major GC more frequent (reducing -F in effect).

it stops the system with an out of memory error if memory usages gets too close to <size>

The problem is often you want the first but not the second, because you'd like to say to the RTS "try to use no more than 2GB, because after that we're into swap space", but you don't want the program to fail if the limit is exceeded.