It is my understanding that the GC does not normally ever return memory to the OS
It seems that it does now. In smallAlloc() and bigAlloc(), if allocation fails it collects garbage and then:
if (lowMem) minimize();
On Windows, lowMem is calculated with GlobalMemoryStatus(), and
is true if "Less than 5 % of virtual address space available"
This is hardly ideal, but better than nothing I guess.
