Let’s talk about memory leak in java or .net first.
Maybe you think with auto Garbage Collection, there will no memory leak at all.
Suggest you write your own ArrayList. You pre-allocate a space when you create one. When you add more elements than your space, you allocate a new space twice as the old space, copy your data to the new space, and add new elements. It’s OK so far.
Now, we delete most of the elements, and, unlucky, you forgot free your space…
This is what we called memory leak in java or .NET. when you implement a ThreadPool, ObjectPool, HashTable, etc. be careful memory leak.
In erlang, it’s nearly no cost to spawn a new process. And erlang encourage you create more processes. It’s erlang-style! We all like it!
Now I just port a java project to erlang. I make most of abject a gen_server. It’s natural. And It’s dangerous.
GC won’t free your gen_server, you need terminate it BY YOURSELF!! Every actors are everlasting, you need KILL them with your hands!
Any best practice for this kinda memory leak? Do not tell me “Supervisor + start_link”.