쓰레기 (컴퓨터 과학)

컴퓨터 과학에서 쓰레기 또는 가비지(garbage)는 추후의 시스템 연산에 더 이상 사용되지 않을 컴퓨터 시스템의 메모리의 데이터, 객체, 부분(또는 기타 시스템 자원)을 포함한다. 모든 컴퓨터 시스템이 유한한 양의 메모리를 지니고 있고 대부분의 소프트웨어가 쓰레기를 생산하기 때문에 쓰레기가 점유하고 있는 메모리의 할당을 해제하여 재사용을 위해 이나 메모리 풀로 반환시키는 일이 필요한 경우가 종종 있다.

분류 편집

쓰레기는 일반적으로 두 종류로 분류된다:

  • 신택틱 가비지(syntactic garbage): 프로그램의 쓰레기 수집으로부터 도달이 불가능하지만 프로그램의 메모리 공간 안에 위치하는 객체나 데이터
  • 시맨틱 가비지(semantic garbage): 어떠한 프로그램 입력들의 결합을 위해 실행 중인 프로그램이 전혀 접근하지 않는 객체나 데이터

쓰레기가 아닌 객체나 데이터는 살아있다(live)고 언급된다.

예시 편집

다음의 자바의 단순 스택 구현체에서 볼 때 스택에서 팝(pop)된 각 요소는 외부 참조가 없어지면 시맨틱 가비지가 된다.[a]

public class Stack {
    private Object[] elements;
    private int size;

    public Stack(int capacity) {
        elements = new Object[capacity];
    }
    public void push(Object e) {
        elements[size++] = e;
    }
    public Object pop() {
        return elements[--size];
    }
}

이러한 일이 발생하는 이유는 elements[]가 여전히 객체 참조를 포함하지만 해당 객체는 이 참조를 통해 다시는 접근되지 않기 때문이다. elements[]은 클래스에 프라이빗(private)이며 pop 메소드는 이미 팝되지 않은 요소들의 참조만 반환한다. (size 감소 이후 이 클래스는 해당 요소로 다시는 접근하지 못한다) 그러나 이러한 일을 인지하는 일에는 클래스의 코드 분석이 요구되며 이러한 현상은 일반적으로 예측하지 못하는 사항이다.

나중에 push 호출이 스택을 이전 크기로 다시 증가시킨다면 이 마지막 참조를 덮어쓰며 해당 객체는 신택틱 가비지가 되는데 그 이유는 해당 객체를 다시는 접근하지 못하기 때문이며 이로써 쓰레기 수집 대상이 된다.

자동 쓰레기 수집 편집

내용주 편집

  1. Simplified from Effective Java Item 6 by omitting resizing and explicit exceptions.

외부 링크 편집

  • Benjamin Pierce (editor), Advanced Topics in Types and Programming Languages, MIT Press (2005), ISBN 0-262-16228-8
  • Richard Jones and Rafael Lins, Garbage Collection: Algorithms for Automated Dynamic Memory Management, Wiley and Sons (1996), ISBN 0-471-94148-4