Agree that it is a lot of work. But if you free and then allocate, you still have to reset up the uncollectable & finalizer data. And since the pointer may have changed, you still end up having to largely do this work. The easier way to handle this would be to adjust how all of the bookkeeping data is stored so that, for example, there aren't 2 different maps for finalizer data, but that's a more sweeping change...