2008-10-29 1 views
10

가비지 수집이 작동하는 방식에 관심이 있습니다. 나는 마크 앤 스위프 (Mark-and-Sweep), 스톱 앤 카피 (Stop-and-Copy), 세대 간 GC (Generic GC) 등과 같은 작업에 대해 읽었습니다. 이들 중 일부를 구현하고 동작을 비교해보고 실험하고 싶습니다. 내 자신의 실험을 시작하는 좋은 방법은 무엇입니까? C, Java 또는 Python에서 이상적으로 (마지막 두 가지는 가비지 수집되므로 사용하기가 어려울 것입니다 ...)어떻게 가비지 수집을 실험 할 수 있습니까?

답변

14

C/C++에서 사용하기 위해 항상 언급 된 내용은 결코 Hans Boehm's입니다.

+0

VM을 사용하는 대신 C/C++ 내에서 머물고 싶다면 * 가비지 수집기로 간주하는 것을 추가하십시오 ... –

+0

+1, 나는 무언가를 극도로 작업 할 때 자주 사용합니다. 복잡한 이중 자유()는 재앙을 불러옵니다. –

+0

맞습니다. gcc 프로젝트에서 사용되는 GC이기도합니다. – none

0

고유 한 JVM을 구현하십시오. 공상적인 것, 단지 기본. JVM 코드를 생성하는 많은 프로그램/컴파일러/언어가 있으므로 테스트 할 수있는 자료가 충분합니다.

2

.NET 런타임 및 Java 런타임은 현재 오픈 소스이므로, 현재 지원 프로그래밍 언어로 놀고 싶다면 런타임 자체로 실험 해 볼 수 있습니다. 그러나 이것을 직접하고 싶다면 자신의 언어를 가지고있는 자신 만의 런타임을 만들어야 할 것입니다.

0

재미와 재생하지만, 가비지 컬렉션은 어두운 예술이다. 작동시키지 않고 최신 VM이 수행하는 효율성으로 작동하도록하십시오.

우리는 할당 속도를 malloc보다 스택 할당과 비교할 수있는 멀티 스테이지와 매직을 사용합니다.

전체 에덴 개념이 흔들립니다.

당신이 사용하는 기술에 대한 몇 가지 백서를 읽어보십시오.

다음은 Factor programming language는 가비지 컬렉터의 자신의 구현에 대한 게시물의 수를 썼다 developes (그냥 빨리 구글/검사에서) 좋은 개요를 갖고있는 것 같아요 기사

http://www.devx.com/Java/Article/21977/0/page/1

+0

-1 : "가비지 수집은 어두운 예술"입니다. 미안하지만 나는 100 줄의 코드로 적절한 가비지 컬렉터를 작성할 수있을 때 이런 식의 문장을 만드는 것은 역효과라고 생각한다. –

+1

@Jon Harrop 간단한 GC를 수행하는 것은 간단합니다 (정확하게 대답 한 내용). 어두운 아트는 새로운 VM의 효율성과 함께 작동하게 만드는 것입니다. 당신은 정말로 그것에 동의합니까? 새로운 VM이 무엇을하는지 살펴 보았습니까? –

+0

@Bill : 블로그에 올린 글 : http://flyingfrogblog.blogspot.com/2010/09/are-multicore-capable-garbage.html –

0

MMTk 고성능 쓰레기 수집의 큰 세트가 포함되어 있습니다. 그것은 포함

  • 복사 수집
  • 추적 수집
  • 참조 카운팅 수집

또한이 있습니다

  • 정지 세계 수집가
  • 동시 수집

연구 플랫폼이기 때문에 generation reference counting collector과 같은 일부 사전 수집기가 있습니다.