[1] just an educated guess. I have no real knowledge of GCs other than skimming how they work in articles and runtime/language docs.
Each Erlang process has a separate heap that is collected independently; because the process heap is usually small a stop-the-process collection does not take much time.
The downside is that sending messages between processes requires copying all the data that is sent between process heaps.