Кіріспе
Чейни алгоритмі, алғаш рет 1970 жылы ACM басылымында C. J. Cheney сипаттаған, компьютерлік бағдарламалық қамтамасыз ету жүйелерінде қоқыс жинаудың тоқтату және көшіру әдісі болып табылады. Бұл схемада үйінді екі тең бөлікке бөлінеді, олардың тек біреуі кез келген уақытта қолданылады. Қоқыс жинау тірі объектілерді бір жартылай кеңістіктен (from space) екіншісіне (to space) көшіру арқылы жүзеге асырылады, содан кейін ол жаңа үйіндіге айналады. Ескі үйіндінің барлығы бірден жойылады. Бұл бұрынғы тоқтату және көшіру әдісінен жақсырақ. Чейни алгоритмі элементтерді келесідей қалпына келтіреді:
Стектегі объектілерге сілтемелер тексеріледі. From space-тегі объектіге сілтеме жасайтын әрбір сілтеме үшін келесі екі амалдың бірі орындалады:
Егер объект әлі to space-ке көшірілмеген болса, онда to space-те оның бірдей көшірмесі жасалады, содан кейін from space-тегі нұсқасы to space-тегі көшірмеге бағыттаушы сілтемемен алмастырылады. Содан кейін объектіге сілтеме to space-тегі жаңа нұсқаға сілтеме жасау үшін жаңартылады. Егер объект to space-ке көшірілген болса, онда сілтеме from space-тегі бағыттаушы сілтеме арқылы жаңартылады. To space-тегі объектілер. Қоқыс жинағыш to space-ке көшірілген объектілердегі барлық объектілерге сілтемелерді тексереді және сілтемеленген объектілер үшін жоғарыда аталған екі амалдың біреуін орындайды. Барлық to space сілтемелері тексеріліп, жаңартылғаннан кейін қоқыс жинау аяқталады. Алгоритмге стек қажет емес және тек екі сілтеме қажет: to space-тегі бос орынның басына сілтеме және to space-те тексеруге тиіс келесі сөз. Екі сілтеме арасындағы деректер оның орындауы үшін қалған жұмысты көрсетеді (бұл объектілер үш түсті терминологияда сұр түсті, кейінірек қараңыз). Бағыттаушы сілтеме (кейде «жарылған жүрек» деп аталады) тек қоқыс жинау процесінде қолданылады; егер to space-тегі объектіге сілтеме табылса (осылайша from space-те бағыттаушы сілтемесі бар), сілтемені жылдам жаңартуға болады, оның сілтемесін бағыттаушы сілтемеге сәйкестендіру арқылы. Стратегия барлық тірі сілтемелерді, содан кейін сілтемеленген объектілердегі барлық сілтемелерді сарқып алу болғандықтан, бұл ендік бірінші көшіру қоқыс жинау схемасы деп аталады.
Object references on the stack. Object references on the stack are checked. One of the two following actions is taken for each object reference that points to an object in from space:
If the object has not yet been moved to the to space, this is done by creating an identical copy in the to space, and then replacing the from space version with a forwarding pointer to the to space copy. Then update the object reference to refer to the new version in to space. If the object has already been moved to the to space, simply update the reference from the forwarding pointer in from space. Objects in the to space. The garbage collector examines all object references in the objects that have been migrated to the to space, and performs one of the above two actions on the referenced objects. Once all to space references have been examined and updated, garbage collection is complete. The algorithm needs no stack and only two pointers outside of the from space and to space: a pointer to the beginning of free space in the to space, and a pointer to the next word in to space that needs to be examined. The data between the two pointers represents work remaining for it to do (those objects are gray in the tri color terminology, see later). The forwarding pointer (sometimes called a "broken heart") is used only during the garbage collection process; when a reference to an object already in to space (thus having a forwarding pointer in from space) is found, the reference can be updated quickly simply by updating its pointer to match the forwarding pointer. Because the strategy is to exhaust all live references, and then all references in referenced objects, this is known as a breadth first list copying garbage collection scheme.
Жартылай кеңістік
Чейни өз жұмысын жарты кеңістіктік қоқыс жинағышқа негіздеді, оны бір жыл бұрын Р.Р. Феничел және Дж.С. Йочелсон жариялаған.
Үш түсті абстракцияға теңестіру
Чейни алгоритмі – үш түсті таңбалау арқылы қоқыс жинаудың мысалы. Сұр жиынның бірінші мүшесі – стек өзі. Стекте сілтеме берілген объектілер қара және сұр жиындардың мүшелерін қамтитын "to" кеңістігіне көшіріледі. Алгоритм кез келген ақ объектілерді (бастапқы кеңістікте алға бағыттау көрсеткіштері жоқ объектілерге тең) "to" кеңістігіне көшіру арқылы сұр жиынға жылжытады. "To" кеңістігінде сканерлеу көрсеткіші мен бос кеңістік көрсеткіші арасындағы объектілер әлі сканерленбеген сұр жиынның мүшелері болып табылады. Сканерлеу көрсеткішінің астындағы объектілер қара жиынға жатады. Объектілер қара жиынға тек сканерлеу көрсеткішін олардың үстінен жылжыту арқылы көшіріледі. Сканерлеу көрсеткіші бос кеңістік көрсеткішіне жеткенде, сұр жиын бос болады және алгоритм аяқталады.