Research Article

A Study of Lock-Free Based Concurrent Garbage Collectors for Multicore Platform

Procedure 3

CopyExtendedObject procedure (procedure code for collector).
Procedure CopyExtendedObject(obj: Object, addr: Address)
(1)    norObj:= AllocNormalObject(addr)
(2)    for   := 0 to CountOfFields(obj) do
(3)           loop:
(4)           oldField.data:= obj.fields[ ].data
(5)           oldField.status:= obj.fields[ ].status
(6)           norObj.Fields[ ].data:= oldField.data
(7)           newField.data:= oldField.data
(8)           newField.status:= 0
(9)           if CAS(&exObj.fields[ ], newField, oldField) != oldField then
(10)              goto loop     //Retry until cas succeed