Ah I see, you're actually using the memory.
I agree there are probably some elements of the runtime tuned to
large-memory systems that should be changed for low-memory systems.
+austin who was discussing OS memory on an issue recently: has there
been any discussion of scavenging more aggressively when low on
memory?
The most concerning point you bring up is that FreeOSMemory "doesn't
seem to do much". If you're no longer using memory, calling it should
do plenty. You may want to add a call to runtime.ReadMemStats in your
experiment and compare the state of Go's memory use after you run
FreeOSMemory.
If everything is working properly, adding a call to
runtime.FreeOSMemory inside
UIApplicationDidReceiveMemoryWarningNotification should be enough to
alleviate these issues. If it doesn't I think why it doesn't is worth
investigating.