Xiao-Feng, thank you for your answers!
> 1. your allocated separate mem is not collected by GC, right?
Yes.
> 2. the original copy of a copied object is unmarked (as dead), right?
You are right again.
> If they are yes, then it might have problems when GC compacts. The
> problems could be:
> 1. how are the pointers to copied objects updated to point to the new copies?
> 2. you set a fw pointer from original copy to new copy, but that
> doesn't help, because the compaction doesn't follow fw pointer at all.
>
> For problem 1, you need extra operations to update all the references
> to the new copies.
Ok. I temporarily solved this problem by the following mechanism. I am
collecting pairs old/mid and mid/new so updating pointers phase just
links this info old->mid->new. So now (temporarily) I don't need to
change any info in object.
> For problem 2, you need install the fw pointer inside the object body,
> not in object header, so that it does not impact the obj_end
> computation. But you need a bit somewhere to indicate the object has
> been copied away. In this way, in the ref updating phase, you can
> check the flag, and follow the fw pointer.
Thank you. I will try this approach. By the previously described
mechanism now I don't need to install fw pointer. But during updating
pointers phase I've got a problem with vt. May I somehow corrupt vt?
Please ask if any additional info needed.
--
Yuri S. Kashnikov
Novosibirsk State University, Russia
2 Pirogova street
630090, Novosibirsk-90
yuri.kashnikoff@gmail.com
|