A good compromise would be if you could specify an object as being "replacable" and then it would have the extra layer of indirection (the table) to make it fast. That way you don't pay a penalty when you're not using that feature and/or don't have to walk the heap. It would also be better for security in that you'd have to explicitly state which objects were allowed to be replaced. You have to think about needing that feature in advance though.