2013-06-05 3 views
6

쓰레기 객체를 인식 할 수있는 가비지 수집 알고리즘은 가비지가되면 즉시 입니까?가비지 수집 알고리즘에는 "정확한 시간"이 있습니까?

내 마음에 오는 유일한 점은 참조 횟수가 0이 아닌 값으로 감소 할 때마다주기 검색이 추가 된 참조 계산입니다.

달성 할 수있는 다른 흥미로운 수집 알고리즘이 있습니까? (내가 호기심을 묻는 것만 알면, 그러한 콜렉터는 모두 비효율적 일 것임을 알고있다)

+0

오늘 실시간 GC에 대한 해커 뉴스에 게시되었습니다. (나는 그것을 읽지 않았다) – leppie

+0

각 참조 변경 후에 마크 앤드 스위프 GC를 실행할 수있다. 그것은 매우 비효율적 일지 모르지만. – svick

+0

@svick : 네 말이 맞아. 이제 나는 어리 석을 느낍니다. – Askaga

답변

-4

이러한 메커니즘은 가비지 수집이 아닌 "힙 관리"라고 불릴 것이다.

정의에서 가비지 수집은 힙 관리와 분리되어 있습니다. 일부 환경/응용 프로그램에서는 "자유"작업을 생략하고 사용중인 내용을 추적하는 것이 더 효율적이기 때문입니다. 대신 잠시 동안, 방금 전에 모든 참조되지 않은 노드를 모아서 다시 무료 목록에 올려 놓습니다.

== 부록의 ==는

I 가비지 컬렉션 힙 관리의 용어를 수정하려고 시도에 대한을 downvoted되고 있어요. Wikipedia article은 수십 년 전에도 대학에서 배운 것과 내 사용법에 동의합니다. Lisp 및 Snobol과 같은 언어는 가비지 수집의 필요성을 창안했습니다. C와 같은 언어는 이러한 강력한 런타임 환경을 제공하지 않습니다. 대신 프로그래머가 사용하지 않는 메모리 및 리소스 정리를 관리해야합니다.

+1

이 말은 내게 의미있는 말처럼 들리지만 실제로 그 질문에 대한 대답이 아닙니다. – svick

+0

또한 나는 네가 옳다고 생각하지 않는다. 참조 횟수 *는 가비지 수집 형식입니다. – svick

+0

@wallyk : 위키피디아 기사를 언급했는데 왜 링크하지 않았습니까? 위키 백과에서 "메모리 관리"로 리디렉션되는 "힙 관리"를 보았습니다.이 기능은 주로 내 질문과 관련이없는 os 수준의 세부 정보와 할당 자 기술을 주로 다루고 있습니다. 또한 svick이 이미 주석을 달았 기 때문에 귀하의 게시물은 내 질문에 실제로 대답하지 않았습니다. 당신의 대답은 기본적으로 실제 수집가가 제 작에서 제안한 사안에서 작동하지 않는 이유를 설명합니다. 사실 저는 제가 제 질문에서 분명히 알았던 것처럼 이미 알고 있습니다. 그러나 실제로 질문에 대답하기 위해 당신의 대답을 편집해라. 그러면 나는 그것을 upvote 할 것이다. – Askaga

0

탈출 분석은 가비지 수집 알고리즘이 아니지만 개체의 수명에 대한 추론을 허용합니다. 따라서 효율성이 중요시되고 모든 사물이 "명백한"경우에 수집되는 것이 아니라면 편리 할 수 ​​있습니다. 기본 개념은 컴파일 타임이나 VM 용으로 컴파일 된 경우로드 타임에 프로그램의 정적 분석을 수행하고 새로 생성 된 객체가 작성된 루틴을 벗어날 수 있는지 파악하는 것입니다 (따라서 분석 이름) . 객체가 전역 메모리에 저장되어 있지 않고 주어진 루틴에서 반환되지 않은 경우 다른 곳으로 전달되지 않으면이 루틴에서 반환되기 전에 릴리스 될 수도 있고 마지막으로 사용 된 위치에서 이전에 릴리스 될 수도 있습니다.

관련 메서드 호출보다 오래 지속되지 않는 개체는 힙이 아닌 스택에 할당 될 수 있으므로 컴파일 할 때 가비지 수집주기에서 제거 될 수 있으므로 일반 GC에 대한 부담이 줄어 듭니다.