ガベージコレクションの必要性について教えてください。

私は、ガベージコレクションというのはあるタイミングでVMが
誰からも参照されていないメモリを自動的に解放するシステムだと認識しています。
具体的にどのように実装されているのかは存じません。

さて、ここで疑問に思ったのは、各ポインタが自分自身の参照カウンタを管理していて、
自分がスコープからはずれたり書き換えられたりしたとき等に参照カウンタを引いていけば
(boost c++でいうshared_ptrです)参照されなくなった時点で自動的に削除されるので、
そちらの方がいいのではないかと思うのですが…

どなたかガベージコレクションについて教えてもらえませんか?