1) Every process in Erlang manages its own memory and has its own GC. This means that GC'ing one process will not stop the world.
2) Erlang has multicore compatibility baked in, through its process-based model.
3) Erlang enforces pure message-passing at a language level, so there is no shared state. This allows concurrent programs to be written much more easily than in languages where one has to manage shared state.
4) Referential transparency - to the programmer, one can use virtually the same code to pass a message on a remote Erlang process and an Erlang process on the same machine.
5) Fault-tolerant and self-healing mechanisms built in.
This is not an exhaustive list -- it just gives you an idea.
Most processes are so short lived, and with message passing, that the GC often might not have to do anything. You just free all memory allocated by processes.
> It is built with concurrency in mind
Like Go on crack. Processes are cheap and are used the same wether they exist on the same machine or a different one. And it has pattern matching.
Also, the actor-based style of programming tends to model real-world interactions more cleanly than OO code, leading to potentially clearer and more maintainable code.
Its VM is rather elegant and powerful. It is a marvel of engineering if you wish. O
Even though rather advanced, I would suggest reading blog posts by Jesper Louis Andersen he covers some of these topics at the level I like.
http://jlouisramblings.blogspot.com/
The books are also good. There is also Learn You Some Erlang book, I even have the dead tree version of it (but there is a free online version as well). That also touches on some uses.
If "cluster OS" or "this thing needs to keep running for 10 years straight, even through software upgrades" sounds like it addresses problems you face, then look into erlang.
If not, then you'll probably find it cool, but not particularly useful.
In Erlang you can remote into servers, examine their message queues, update the running processes with new functions, etc. You can guess what that would take with those other languages.
You could roll your own supervisor process and have things automatically restarted when you lose connection to them in the other languages, but it's already baked into Erlang.