Memory Management

글 6개

GC가 있어도 샌다 - 치워지지 않는 것들

CS · Memory

GC가 있어도 샌다 - 치워지지 않는 것들

회수기는 안 쓰는 것을 치우지 않는다. 안 닿는 것을 치운다. 이 한 마디 차이에서 자동 회수 언어의 메모리 누수가 통째로 나온다. 어떤 코드가 안 쓸 것을 붙들고 있는지, 그리고 새는 것과 그냥 많이 쓰는 것을 어떻게 가르는지 본다.

메모리의 수명 6편

멈춤 시간 - 치우는 동안 프로그램은 선다

CS · Memory

멈춤 시간 - 치우는 동안 프로그램은 선다

자동 회수는 공짜가 아니라 시간으로 값을 치른다. 왜 치우는 동안 프로그램을 세워야 하는지, 왜 대부분의 객체가 금방 죽는다는 관찰이 회수기의 설계를 통째로 바꿨는지, 그리고 무엇과 무엇을 맞바꾸는지 본다.

메모리의 수명 5편

도달 가능성 - 닿을 수 있으면 살아 있다

CS · Memory

도달 가능성 - 닿을 수 있으면 살아 있다

세는 대신 따라가 본다. 정해진 출발점에서 참조를 타고 갈 수 있으면 살아 있고, 못 가면 버린다. 세는 방식이 못 풀던 고리가 왜 이 방식에서는 저절로 풀리는지, 그리고 그 대신 무엇을 잃는지 본다.

메모리의 수명 4편

참조 세기 - 아무도 안 보면 버린다

CS · Memory

참조 세기 - 아무도 안 보면 버린다

가리키는 곳이 몇 개인지를 세다가 0이 되면 그 자리를 돌려준다. 가장 단순하고 가장 즉시적인 자동 회수 방식이다. 세는 값이 어디서 나가는지, 그리고 이 방식이 절대 못 푸는 한 가지가 무엇인지 본다.

메모리의 수명 3편

손으로 돌려주기 - 두 번 놓거나 한 번도 안 놓거나

CS · Memory

손으로 돌려주기 - 두 번 놓거나 한 번도 안 놓거나

반납을 사람이 적으면 실패하는 방식이 셋이다. 안 놓거나, 두 번 놓거나, 놓고 나서 또 쓰거나. 이 단순해 보이는 일을 왜 사람이 자꾸 틀리는지, 그리고 왜 그 버그가 하필 엉뚱한 데서 터지는지를 본다.

메모리의 수명 2편

메모리 회수 - 빌린 자리는 돌려줘야 한다

CS · Memory

메모리 회수 - 빌린 자리는 돌려줘야 한다

프로그램은 실행되는 내내 메모리를 얻는다. 얻는 건 한 줄인데 돌려주는 건 왜 어려운가. 스택은 저절로 치워지고 힙만 문제로 남는 이유부터, 안 돌려준 자리가 프로그램을 어떻게 죽이는지까지 본다.

메모리의 수명 1편