22

둘 다 (세대 및 증분) 가비지 수집을 더 빠르게 만드는 다른 접근 방식이라고 생각합니다. 그러나 세대와 증분의 차이점은 무엇입니까? 어떻게 작동합니까? 그리고 하나는 실시간 소프트웨어를 위해 더 나은/짧은 휴식을 생산합니까?세대 별 및 증분 가비지 수집의 차이점은 무엇입니까?

또한 Boehm GC는?

답변

20

세대 별 GC는 순환 중에 도달 할 수없는 모든 개체를 수집하지 않기 때문에 항상 증분입니다. 반대로 증분 GC는 도달 할 수없는 개체를 수집할지 여부를 결정하기 위해 반드시 생성 체계를 채택하지 않습니다.

세대 별 GC는 도달 할 수없는 개체를 대략적으로 마지막 사용에 따라 서로 다른 집합, 즉 나이로 나눕니다. 기본 이론은 가장 최근에 생성 된 객체가 신속하게 도달 할 수 없게된다는 것입니다. 그래서 '젊은'물건을 가진 세트는 초기 단계에서 수집됩니다.

증분 GC 은 위의 세대 구성으로 구현 될 수 있지만, 다른 방법을 사용하여 어떤 그룹의 개체를 스윕할지 결정할 수 있습니다.

두 가지 GC 방법에 대한 자세한 내용은 this wikipedia page을 참조하십시오.

뵘의 웹 사이트에 따르면, 그의 GC는 증분 세대이다

콜렉터는 마크 - 스윕 알고리즘을 사용한다. 가상 메모리 지원 종류를 제공하는 운영 체제에서 증분 및 세대 수집을 제공합니다.

지금까지 실시간 환경에 관한 한, 가비지 컬렉션을 수행하는 새롭고 독창적 인 방법을 설명하는 여러 학술 연구 논문이있다

:

17

증가 가비지 콜렉터 대신 전체 모음을 실행할 필요없이, (이것은 다음 몇 가지 더 많은 작업, 다음 몇 가지 더 많은 작업을 약간의 작업을 할 수 있다는 것을 의미) 점진적으로 실행할 수있는 가비지 컬렉터입니다 중단없이. 이것은 예를 들어, 예를 들어, 가비지 컬렉터가했던 오래된 가비지 컬렉터와는 대조적입니다. 마크 & 스윕 (sweep) 오브젝트에 대해 작업 할 수있는 다른 코드가 없습니다. 그러나 명백한 점은 증분 가비지 컬렉터가 실제로 동일한 객체에서 실행되는 다른 코드와 병렬로 을 실행하는지 여부는 인터럽트 가능한 경우 (예 : 더티 객체와 클린 객체를 구별해야하는 경우) 중요하지 않습니다.

세대 가비지 수집기는 구형, 중형 및 새 개체를 구별합니다. 그런 다음 새 오브젝트 (키워드 "Eden")에서 GC를 복사하고, 이전 오브젝트에 대해서는 & 스위프를 표시하고 중간 오브젝트에는 다른 구현 가능성 (구현에 따라 다름)을 표시 할 수 있습니다. 구현에 따라 객체의 세대가 구별되는 방식은 메모리 또는 깃발에 의해 점유 된 영역 중 하나입니다. 세대 별 GC의 과제는 한 세대에서 다른 세대를 참조하는 객체의 목록을 최신 상태로 유지하는 것입니다.뮤 테이터가 계속하면서 http://en.wikipedia.org/wiki/Boehm_garbage_collector

+0

이 에덴이란 무엇입니까? – kingsmasher1

+0

젊은 세대는 to-space, from-space 및 Eden으로 나뉩니다. 할당은 from-space와 Eden에서 모두 이루어지며 from-space와 Eden은 모두 콜렉션에 의해 to-space에 복사됩니다. 그 차이점은 에덴이 완전히 제거되었다는 것입니다. 자세한 내용은 여기를보고 Eden에 대한 페이지를 검색하십시오. http://java.sun.com/docs/hotspot/gc1.4.2/faq.html –

3

http://www.memorymanagement.org/glossary/i.html#incremental.garbage.collection

일부 추적 가비지 컬렉션 알고리즘으로 끝나는없이 의 중앙에 수집 사이클을 정지 할 수

Boem 여기에 인용으로 증가 세대 GC 인 데이터가 일치하지 않습니다. 이러한 콜렉터는 점진적으로 작동 할 수 있으며 대화 형 시스템에서의 사용에 적합하도록 입니다.

프리미티브 가비지 수집기 (1)는 수집주기를 시작한 후에 작업을 완료하거나 지금까지 모든 작업을 포기해야합니다. 이는 종종 으로 적절한 제한 사항이지만 시스템 이 응답 시간을 보장해야하는 경우 용납되지 않습니다. 예를 들어, 사용자가 인 시스템과 실시간 하드웨어 제어 시스템에서. 이러한 시스템 은 시간이 중요한 처리와 가비지 수집을 낭비하지 않고도 병렬로 효과적으로 진행할 수 있도록 증분 가비지 수집을 사용할 수 있습니다.

http://www.memorymanagement.org/glossary/g.html#generational.garbage.collection

세대 가비지 컬렉션은 이 세대 가설을 사용합니다 것을 가비지 수집을 추적한다. 개체가 세대에 함께 수집됩니다. 새 개체는 막내 또는 보육 세대에 배정되며 생존하는 경우 이전 세대로 승격됩니다. 더 오래된 세대의 개체는 덜 비난 받아 CPU 시간을 절약합니다. 시간.

일반적으로 개체가 더 작은 개체를 참조하는 경우는 거의 없습니다. 따라서 한 세대의 개체에는 일반적으로 젊은 세대의 개체가 거의 참조되지 않습니다. 즉, 젊은 세대를 수집하는 과정에서 오래된 세대 인 세대를 검색하면 기억 한 세트를 사용하여보다 효율적으로 수행 할 수 있습니다.

일부 기능적인 언어 (즉, 업데이트하지 않음)에서 모든 참조는 거꾸로되어 있으므로 기억 된 세트는 이 필요하지 않습니다.

Boehm-Demers-Weiser에는 GC_enable_incremental을 호출하여 활성화 할 수있는 증분 모드가 있습니다. http://www.hpl.hp.com/personal/Hans_Boehm/gc/gcinterface.html