https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/runtime_control.html#rts-options-to-control-the-garbage-collector
-A ⟨size⟩
Default: 1MB
Set the allocation area size used by the garbage collector. The allocation area (actually
generation 0 step 0) is fixed and is never resized (unless you use -H [⟨size⟩], below).
Increasing the allocation area size may or may not give better performance (a bigger allocation
area means worse cache behaviour but fewer garbage collections and less promotion).
With only 1 generation (e.g. -G1, see -G ⟨generations⟩) the -A option specifies the minimum
allocation area, since the actual size of the allocation area will be resized according to the
amount of data in the heap (see -F ⟨factor⟩, below).
-M ⟨size⟩
Default: unlimited
Set the maximum heap size to ⟨size⟩ bytes. The heap normally grows and shrinks according to the
memory requirements of the program. The only reason for having this option is to stop the heap
growing without bound and filling up all the available swap space, which at the least will
result in the program being summarily killed by the operating system.
The maximum heap size also affects other garbage collection parameters: when the amount of live
data in the heap exceeds a certain fraction of the maximum heap size, compacting collection will
be automatically enabled for the oldest generation, and the -F parameter will be reduced in
order to avoid exceeding the maximum heap size.