A computing system comprising: a memory; and a processor coupled to the memory, wherein as part of a garbage collection process, the processor is configured to: identify a first object in a first region of the memory for migration; mark the first object for migration from the first region of the memory to a second region of the memory by changing a first, memory stored, version number associated with the first object from a first value to a second value, the second value indicating that the first object is reserved for object migration; detect an access to the first object in the first region prior to the first object being migrated to the second region, wherein said access is a memory access that includes a second version number; compare the value of the first version number to the value of the second version number; responsive to detecting that the value of the first version number matches the value of the second version number, allow the access to the first object; responsive to detecting that the value of the first version number does not match the value of the second version number, halt the access to the first object (1025, 1030); move the first object from the first region to the second region; and change the value of the first version number of the first object from the second value back to the first value responsive to completing migration of the first object to the second region. a memory; and a processor coupled to the memory, wherein as part of a garbage collection process, the processor is configured to: identify a first object in a first region of the memory for migration; mark the first object for migration from the first region of the memory to a second region of the memory by changing a first, memory stored, version number associated with the first object from a first value to a second value, the second value indicating that the first object is reserved for object migration; detect an access to the first object in the first region prior to the first object being migrated to the second region, wherein said access is a memory access that includes a second version number; compare the value of the first version number to the value of the second version number; responsive to detecting that the value of the first version number matches the value of the second version number, allow the access to the first object; responsive to detecting that the value of the first version number does not match the value of the second version number, halt the access to the first object (1025, 1030); move the first object from the first region to the second region; and change the value of the first version number of the first object from the second value back to the first value responsive to completing migration of the first object to the second region. identify a first object in a first region of the memory for migration; mark the first object for migration from the first region of the memory to a second region of the memory by changing a first, memory stored, version number associated with the first object from a first value to a second value, the second value indicating that the first object is reserved for object migration; detect an access to the first object in the first region prior to the first object being migrated to the second region, wherein said access is a memory access that includes a second version number; compare the value of the first version number to the value of the second version number; responsive to detecting that the value of the first version number matches the value of the second version number, allow the access to the first object; responsive to detecting that the value of the first version number does not match the value of the second version number, halt the access to the first object (1025, 1030); move the first object from the first region to the second region; and change the value of the first version number of the first object from the second value back to the first value responsive to completing migration of the first object to the second region.