가비지 컬렉션 핸드북
(gchandbook.org)- 자동 메모리 관리의 원리를 체계적으로 다루는 기술서로, 최신 하드웨어와 소프트웨어 환경에서의 가비지 컬렉션 알고리듬을 포괄적으로 설명
- 1996년과 2012년에 이어 출간된 제2판으로, 지난 60년간 축적된 연구와 개발 성과를 통합
- 병렬, 증분, 동시, 실시간 수집 등 최신 고성능 수집기 기법을 포함하고, 의사코드와 그림으로 알고리듬을 구체적으로 제시
- 지속성(persistence) 및 에너지 인식형 수집을 다루는 새로운 장이 추가되고, 3,400편 이상의 관련 논문 데이터베이스와 연계
- 현대 프로그래밍 언어 대부분이 가비지 컬렉션을 채택한 상황에서, 개발자가 적절한 수집기 선택과 구성을 이해하는 데 필수적인 참고서
제2판 개요
- 1996년판 Garbage Collection과 2012년판 The Garbage Collection Handbook의 후속으로, 자동 메모리 관리 분야의 최신 상태를 반영
- 기술 발전으로 인해 메모리 관리가 더욱 복잡하고 중요해진 점을 반영
- 지난 60년간 연구자와 개발자가 축적한 지식을 하나의 접근 가능한 틀로 통합
-
하드웨어·소프트웨어 발전이 가비지 컬렉션에 제기한 새로운 과제를 다룸
- 프로그램 실행 환경 변화가 고성능 수집기 설계자와 구현자에게 미치는 영향을 탐구
- 단순·전통적 알고리듬뿐 아니라 병렬, 증분, 동시, 실시간 수집을 포함
- 알고리듬과 개념은 의사코드와 그림으로 설명
책의 주요 특징
- 1996년 및 2012년판의 완전하고 최신의 후속서 제공
- 병렬·동시·실시간 수집 알고리듬을 포괄적으로 다룸
- 상용 고성능 수집기의 동작을 상세히 설명
- 런타임 시스템과의 복잡한 인터페이스 문제를 다룸
- 90쪽 이상 추가, 지속성과 에너지 인식형 수집에 관한 신규 장 포함
- 약 3,400편의 관련 논문 데이터베이스와 연계
전자책 및 번역판
- 전자책은 인쇄본보다 확장된 형태로, 37,000개 이상의 하이퍼링크를 포함
- 장, 절, 알고리듬, 그림, 용어집, 색인, 연구 논문 등으로 연결
- 2016년에 중국어 및 일본어 번역판이 출간되어 독자층 확대
웹 리소스
- 온라인 서지 데이터베이스는 약 3,400편의 가비지 컬렉션 관련 논문을 포함
- 일부 항목에는 초록이 있으며, 대부분은 URL 또는 DOI 제공
- 지속적으로 업데이트되며, BibTeX, PostScript, PDF 형식으로 다운로드 가능
Hacker News 의견들
-
내가 가장 좋아하는 가비지 컬렉션 관련 일화는 이 글에 있음
- 다른 곳에서도 비슷한 방식을 쓴다고 들었음. 예를 들어 Standard Missile에서는 유압유를 재순환하지 않고 비행 중 그냥 배출하는데, 정말 멋진 공학적 해결책임
- 그건 일종의 region-based 메모리 할당기라고 부를 수 있을 것 같음. 단지 단 하나의 리전만 존재한다는 점이 다름
- 이런 방식은 꽤 표준적인 접근임. 핵심은 null GC가 아니라 정적 분석으로 정확한 메모리 요구량을 증명하는 데 있음
- 이 이야기는 동료들에게 자주 들려주는 좋은 교훈임. 완벽한 소프트웨어를 만들고 싶지만, 실제 비즈니스 요구에선 꼭 그럴 필요가 없음을 보여줌
- 이게야말로 진정한 궁극의 가비지 컬렉션 기술이라고 부르고 싶음
-
저자들이 실제로 어떤 프로덕션 GC를 만들었는지 책에 나와 있으면 좋겠음. 현실 세계에서 배울 수 있는 비직관적인 사례들이 많기 때문에, 그런 내용이 담긴 책이라면 훨씬 흥미롭고 유용할 것 같음
-
정말 좋은 책임. 예전 토론도 있었음: 이전 논의 링크
-
책에 실시간 GC에 대한 짧은 섹션이 있던데, 제약된 환경에서의 GC에 얼마나 비중을 두는지 궁금함
나도 예전부터 3D AA급 게임을 GC로 구현해보고 싶은 충동이 있었음. 리소스가 극도로 제한된 플랫폼이 아니라면 충분히 가능하다고 생각함
이제 업무에서 조금 여유가 생겨서, 이번 겨울과 봄에 프로토타입을 만들어볼까 함- 요즘 대부분의 AA 게임 엔진은 이미 GC를 사용함. Unreal과 Unity가 대표적임. 내부적으로는 수동 메모리 관리도 하지만, 노출된 API는 GC를 염두에 두고 설계되어 있음
반면 Godot Engine은 GC를 쓰지 않고 참조 카운팅을 사용함. 순환 참조 탐지를 지원하지 않기 때문에 모든 객체를 트리 구조로 배치해야 함 -
미 해군의 전투함 무기 조준 시스템이나 프랑스의 미사일 추적 시스템도 Java의 실시간 GC로 구현되어 있음.
관련 자료: Thales 사례, Aegis Combat System, USS Bunker Hill 사례
현실에서는 모든 GC가 동일하지 않으며, “insert credit to continue” 같은 건 존재하지 않음 - Minecraft도 GC를 사용하는 인디 게임이지만, 역사상 가장 많이 팔린 게임임
- Unreal Engine은 내부 객체 그래프를 위한 GC를 가지고 있어서 이미 많은 게임이 GC를 활용 중임
- Unreal은 증분형 GC를 사용함
- 요즘 대부분의 AA 게임 엔진은 이미 GC를 사용함. Unreal과 Unity가 대표적임. 내부적으로는 수동 메모리 관리도 하지만, 노출된 API는 GC를 염두에 두고 설계되어 있음
-
이 책은 정말 대단한 참고서임. GC를 사용하는 엔지니어라면 반드시 읽어야 하고, GC가 필요 없는 사람이라도 초반의 메모리 할당기 부분이 매우 유익함
-
나도 이 책을 가지고 있음. 매우 잘 쓰였고 꼼꼼한 책이라 강력히 추천함
-
예전에 Hosking 교수님에게 수업을 들었음. 괜찮은 경험이었고, 그분이 쓴 책이라서 바로 구매했음
필수는 아니지만, GC의 설계 문제와 파이널라이저의 영향을 깊이 이해하는 데 도움이 되었음. 그 부분을 읽고 꽤 큰 깨달음을 얻었음 -
인쇄본과 EPUB 파일을 함께 구매할 수 있는 “buy now” 버튼이 있었으면 좋겠음. 사이트에서 책을 홍보하긴 하지만, 구매 과정이 너무 복잡함