How we tracked down (what seemed like) a memory leak in one of our Go microservices
Interesting article about memory management and garbage collector behaviour. If your code runs on a runtime or a VM, you need to master the behaviour of the underlying stack to proper optimize for it and not be bitten by its behaviour.
This article is about Go, but you could write a similar article about Erlang memory profiling. You sometimes have to force the GC to release the memory. Whether you need to do so depends directly on your application and usage pattern.