예, gc는 상각 된 상수 시간입니다. 최대 작업 크기 k 세트로 시간 동안 실행되는 알고리즘이 있다고 가정합니다 . 이제 프로그램을 실행하는 동안 최대 O ( n ) 단어를 할당 할 수 있으며 복사 가비지 수집기를 실행하는 데 드는 시간 비용은 O ( k )입니다 (즉, gc 비용은 총계에 비례 함) 라이브 데이터의 양). 따라서 gc를 최대 O ( n / k ) 번 실행하면 총 런타임 비용은 O ( n )로 제한됩니다.엔케이O ( n )O ( k )O ( n / k )O ( n )이는 gc의 상각 비용이 일정 함을 의미합니다. 따라서 각 반 공간의 크기가 인 Cheney 스타일 콜렉터 가 있으면 k 단어를 할당하는 데 O ( k ) 가 걸리므 로 전체 콜렉션을 n / k 단계 마다 두 번 이상 호출 할 수 없음을 쉽게 알 수 있습니다 시간과 작업 세트는 크기 k를 절대 초과하지 않으므로 원하는 범위를 제공합니다. 이것은 gc 문제를 무시하는 것을 정당화합니다.2 Kn / k케이O ( k )케이
그러나 gc의 유무를 무시할 수없는 경우는 잠금없는 데이터 구조를 작성할 때입니다. 많은 최신 잠금없는 데이터 구조는 의도적으로 메모리를 누설하고 정확성을 위해 gc에 의존합니다. 높은 수준에서 작동하는 방식은 일부 데이터를 복사하고 변경 한 다음 CAS 명령으로 원자 적으로 업데이트하여 CAS가 성공할 때까지 루프에서 실행하는 것입니다. 이러한 알고리즘에 결정적 할당 해제를 추가하면 알고리즘이 훨씬 복잡해 지므로 사람들은 종종 귀찮게하지 않습니다 (종종 Java와 같은 환경을 대상으로하기 때문에).
편집 : 당신이 아닌 바운드 범위를 원한다면 Cheney 수집기는 그것을하지 않을 것입니다-호출 될 때마다 전체 라이브 세트를 스캔합니다. 구글의 키워드는 "실시간 가비지 수집"이고 Djikstra et al. 스틸은 최초의 실시간 마크 앤 스윕 수집기를, 베이커는 최초의 실시간 압축 gc를 제공했습니다.
@article {dijkstra1978fly,
title = {{즉석 가비지 수집 : 협력 운동}},
author = {Dijkstra, EW 및 Lamport, L. 및 Martin, AJ 및 Scholten, CS 및 Steffens, EFM},
journal = {ACM의 커뮤니케이션},
volume = {21},
숫자 = {11},
pages = {966--975},
issn = {0001-0782},
년 = {1978},
publisher = {ACM}
}
@article {steele1975multiprocessing,
title = {{멀티 프로세스 압축 가비지 수집}},
author = {Steele Jr, GL},
journal = {ACM의 커뮤니케이션},
volume = {18},
숫자 = {9},
pages = {495--508},
issn = {0001-0782},
년 = {1975},
publisher = {ACM}
}
@article {baker1978list,
title = {{직렬 컴퓨터에서 실시간으로 목록 처리}},
author = {베이커 주니어, HG},
journal = {ACM의 커뮤니케이션},
volume = {21},
숫자 = {4},
pages = {280--294},
issn = {0001-0782},
년 = {1978},
publisher = {ACM}
}