Java/OOP

[OOP] 가비지 컬렉션(Garbage Collection) - 생성과 소멸

JoonYong 2024. 1. 29. 01:36

1. 가비지 컬렉션(Garbage Collection)

가비지 컬렉션은 영어로 Garbeage Collection으로 줄여서 GC라고도 부릅니다. 가비지 컬렉션은 자바의 메모리 관리 방법 중의 하나로 JVM의 Heap 영역에서 동적으로 할당했던 메모리 영역 중 필요 없게 된 메모리 영역을 주기적으로 삭제하는 프로세스를 말합니다.

 

2. 가비지 컬렉터(Garbage Collector)

가비지 컬렉터는 가비지 컬렉션을 수행하는 실제 동작을 담당하는 컴포넌트입니다. 자바 가상 머신(JVM)에서 실행되며, 가비지 컬렉션 알고리즘에 따라 사용하지 않는 객체를 탐지하고 제거합니다. 가비지 컬렉터는 자동으로 동작하며, 개발자가 직접 메모리 관리를 신경쓰지 않아도 됩니다.

 

● C와 C++ 같은 Unmanaged language는 free()와 같은 함수를 사용해서 메모리를 직접 메모리를 해제해야 한다.사용하지 않는 객체의 메모리 점유는 결국 메모리 누수로 이어지게 된다.

● 메모리는 한정된 자원이기 때문에 사용하지 않거나 필요가 없는 부분은 해제를 해주는 것이 맞다.
이런 번거로운 일을 GC가 대신 해주고 있는 것이다. 이를 통해 개발자는 명시적으로 메모리를 해제하는 작업에 대한 부담을 덜 수 있습니다.

 

3. 가비지 컬렉터 대상

  • Unreachable 객체: 프로그램에서 더 이상 접근할 수 없는 객체들은 가비지 컬렉션의 대상이 됩니다. 이는 해당 객체에 대한 참조가 없거나, 참조되고 있는 객체들로부터의 접근 경로가 없는 경우를 의미합니다.
  • 동적으로 할당된 객체: 프로그램 실행 중에 동적으로 생성된 객체들은 가비지 컬렉션의 대상이 됩니다. 예를 들어, new 키워드를 사용하여 생성된 객체들은 가비지 컬렉션의 대상이 될 수 있습니다.
  • 불필요한 객체: 프로그램에서 더 이상 사용되지 않는 객체들은 가비지 컬렉션의 대상이 됩니다. 예를 들어, 메서드 실행이 종료되면 해당 메서드 내에서 생성된 객체들은 가비지 컬렉션의 대상이 될 수 있습니다.

4. 가비지 컬렉션의 장점

  1. 메모리 누수 방지: 가비지 컬렉션은 개발자가 메모리를 명시적으로 해제하지 않아도 되므로, 메모리 누수로 인한 프로그램의 성능 저하나 충돌을 방지할 수 있습니다.
  2. 편리한 개발: 가비지 컬렉션은 개발자가 메모리 관리에 대한 부담을 줄여줍니다. 개발자는 객체를 생성하고 사용하는 데 집중할 수 있으며, 메모리 관리에 대한 실수를 줄일 수 있습니다.
  3. 동적 메모리 할당: 자바는 동적으로 객체를 생성하고 사용할 수 있는 언어입니다. 가비지 컬렉션은 이러한 동적 메모리 할당을 가능하게 하며, 자원의 효율적인 활용을 도와줍니다.

5. 가비지 컬렉션의 단점

1. 개발자가 메모리가 언제 해제되는지 정확하게 알 수 없다.

2. 가비지 컬렉션(GC)이 동작하는 동안에는 다른 동작을 멈추기 때문에 오버헤드가 발생한다.