Nah, only copying / generational collectors do heap compactification. A simple Mark&Sweep collector doesn't, for example. Nor does reference counting. Both of which are used by many Lisp or Lisp-like languages.
Nothing can substitute for a really good allocator.
Nothing can substitute for a really good allocator.