It's also about type safety and code safety, access control and a bunch of other things.
If you don't want things like buffer overflows, stack corruption, let alone things like wiping out vpointer tables, memory fragmentation, bad pointer casting, etc, you have to abstract memory access. Thats what a GC does. You don't have direct access to the memory. And because of that, you can't directly allocate/deallocate memory.
It may sound terrible and slow, but it's actually damn fast when you use it right, and saves you a *lot* of time. The problem is the usage patterns are quite different.
It's also can move with architecture changes. As with the JIT compiled languages. Hence the same code works perfectly well on a PPC, PC, cellphone, x64, whatever. Eg no need to worry about 64bit pointers.
[edit]
the 0.1% was for the process, not the pc.
If you don't want things like buffer overflows, stack corruption, let alone things like wiping out vpointer tables, memory fragmentation, bad pointer casting, etc, you have to abstract memory access. Thats what a GC does. You don't have direct access to the memory. And because of that, you can't directly allocate/deallocate memory.
It may sound terrible and slow, but it's actually damn fast when you use it right, and saves you a *lot* of time. The problem is the usage patterns are quite different.
It's also can move with architecture changes. As with the JIT compiled languages. Hence the same code works perfectly well on a PPC, PC, cellphone, x64, whatever. Eg no need to worry about 64bit pointers.
[edit]
the 0.1% was for the process, not the pc.