
Ketil Malde wrote:
wren ng thornton
writes: FWIW, the JVM also fails to release memory resources back to the OS. Given all the problems I've seen that one cause for long-running processes, I'm definitely in support of correcting any behavior like this in the GHC RTS.
I'm curious what real problems arise from this? As far as I can tell, virtual memory and overcommit ought to make this (i.e. not releasing memory back to the OS) mostly harmless. Is this on particular systems with different properties than your average run-of-the-mill Unix?
Consider a process, A, which goes through a cycle of spawning off another process, B, and reaping its output. More specifically, A consumes a lot of memory when B is not running, but then flushes most of it before spawning B and then idles until B is done. Also B consumes a lot of memory (which is always returned to the system each time B is terminated). If A cannot return memory to the system prior to spawning B, this will cause the OS to over-commit memory, which will cause various OSes to either kill the process, start thrashing, or other Bad Things(tm). I'd have to ask my coworker which particular systems caused the most problems, but we target all of Linux, OSX, and Windows for the toolkit that includes both A and B. -- Live well, ~wren