가비지 수집 프로그래밍 언어로 지정된 최악의 데이터 구조의 실행 시간을 분석 할 때 GC 비용을 무시할 수 있습니까?


22

방금 질문에 대한 대답이 "예"라고 가정했지만 그럴만한 이유가 없습니다. 아마 최악의 경우 속도 저하 를 유발하는 가비지 수집기가 있다고 생각합니다 . 내가 인용 할 수있는 결정적인 기준이 있습니까? 필자의 경우 순전히 기능적인 데이터 구조를 작업 중이며 세부 사항이 중요한 경우 표준 ML을 사용합니다.영형(1)

그리고 아마도이 질문은 Java에 지정된 데이터 구조에 적용될 때 훨씬 더 관련이 있습니까? Java를 사용하는 알고리즘 / 데이터 구조 교과서에서 관련 논의가 있습니까? Sedgewick에 Java 버전이 있지만 C 버전에만 액세스 할 수 있다는 것을 알고 있습니다.

답변:


17

예, gc는 상각 된 상수 시간입니다. 최대 작업 크기 k 세트로 시간 동안 실행되는 알고리즘이 있다고 가정합니다 . 이제 프로그램을 실행하는 동안 최대 O ( n ) 단어를 할당 할 수 있으며 복사 가비지 수집기를 실행하는 데 드는 시간 비용은 O ( k )입니다 (즉, gc 비용은 총계에 비례 함) 라이브 데이터의 양). 따라서 gc를 최대 O ( n / k ) 번 실행하면 총 런타임 비용은 O ( n )로 제한됩니다.케이영형()영형(케이)영형(/케이)영형()이는 gc의 상각 비용이 일정 함을 의미합니다. 따라서 각 반 공간의 크기가 인 Cheney 스타일 콜렉터 가 있으면 k 단어를 할당하는 데 O ( k ) 가 걸리므 로 전체 콜렉션을 n / k 단계 마다 두 번 이상 호출 할 수 없음을 쉽게 알 수 있습니다 시간과 작업 세트는 크기 k를 절대 초과하지 않으므로 원하는 범위를 제공합니다. 이것은 gc 문제를 무시하는 것을 정당화합니다.2케이/케이케이영형(케이)케이

그러나 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}
}

에이에이

1
"예, gc는 상시 일정 시간입니다". 이것은 일반적으로 사실이 아닙니다. 당신은 GC 될 수 있다고 주장 수도 있지만 반드시 그런 것은 아니며 실제적인 것은 아닙니다. 예를 들어 List.map스택 깊이가 선형이고 보육원이 대피 할 때마다 스택이 순회되므로 OCaml 의 순진 은 실제로 2 차 복잡성입니다. 큰 포인터 배열이 발생하는 주 슬라이스도 마찬가지입니다.
Jon Harrop

12

영형()

영형(1)

결정적인 가비지 콜렉션 참조는 다음과 같습니다.

  • Richard Jones와 Rafael Lin의 가비지 콜렉션

Ben Zorn은 다른 가비지 수집 알고리즘의 실제 비용을 측정 하는 작업을 수행 했지만 다음은 최신 논문이 훨씬 포괄적 인 비교를 제공합니다.

자세한 내용은 다음을 참조하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.