다양한 공부/면접대비

개념정리 : What is Garbage Collection in Java?

RunTurtle 2024. 1. 19. 19:19

Garbage Collection이란 영어 그대로 해석하면 쓰레기 수집기이다.

Garbage collection의 더 이상 필요 없거나 사용되지 않는 코드를 자동으로 삭제하는 프로세스다. 이를 통해 메모리 공간을 자동으로 확보하고 개발자들이 더 쉽게 Java 애플리케이션을 코딩할 수 있게 해준다.



그렇다면 어떻게  Garbage collection이 java에서 어떻게 동작하는지 알아보겠다.


마킹(Marking) :

이 단계에서는 가비지 컬렉터(Garbage Collector, GC)가 현재 사용 중인 객체와 더 이상 사용되지 않는 객체를 구별하여 사용 중인 객체는 계속 메모리에 유지되고 사용되지 않는 객체는 제거 대상이 된다!

>> 보충 설명

가비지 컬렉션의 마킹 단계에서는 가비지 컬렉터가 힙 메모리를 스캔하여 살아있는 객체, 즉 애플리케이션에서 참조하는 객체들을 식별합니다. 이 단계는 객체들이 '살아있음' 또는 '죽음'의 상태를 나타내는 마크 비트를 사용합니다. 객체가 생성될 때 마크 비트는 0(거짓)으로 설정되며, 마킹 단계에서는 애플리케이션의 루트에서 시작하여 도달 가능한 모든 객체에 대해 마크 비트를 1(참)로 설정합니다. 참조되지 않는 객체들은 이 비트가 변경되지 않은 채 남아 있게 되며, 이러한 객체들은 제거 대상이 됩니다. 이렇게 식별된 사용되지 않는 객체들은 이후 스위핑 단계에서 메모리에서 제거됩니다.


스위핑(Sweeping) :

마킹 단계에서 식별된 사용되지 않는 객체들을 메모리에서 제거한다. 이 과정을 통해 사용되지 않는 객체가 차지하고 있던 메모리 공간이 해제된다.

>> 보충 설명

스위핑단계에서는 마킹 단계에서 식별된 사용되지 않는 객체들이 실제로 메모리에서 제거됩니다. 이 단계는 가비지 컬렉터가 메모리를 다시 스캔하여, 마크되지 않은 즉, 참조되지 않는 객체들을 찾아내고 삭제합니다. 이로써 메모리 공간이 확보되며, 새로운 객체를 위한 공간이 마련됩니다. 스위핑 단계는 프로그램의 메모리 관리에 있어 필수적인 과정으로, 메모리를 효율적으로 재사용할 수 있게 합니다.

 

컴팩션(Compaction) :

메모리 내에서 사용 중인 객체들을 재배치하여 메모리의 효율성을 높이는 과정이다. 이 단계는 메모리의 조각화(fragmentation)를 줄이고, 새로운 객체가 메모리에 저장될 때 연속적인 공간을 확보하는 데 도움이 된다.

>> 보충 설명

컴팩션단계는 스위핑을 통해 메모리에서 제거된 객체들이 남긴 공간을 재조정하여 메모리의 조각화를 방지합니다. 이 단계에서는 사용 중인 객체들이 메모리 상에서 연속적인 블록으로 재배치되어, 메모리의 효율성을 높이고 새로운 객체의 할당을 용이하게 합니다. 컴팩션은 메모리의 연속성을 유지하고, 효율적인 메모리 할당을 가능하게 함으로써, 전체적인 시스템 성능에 긍정적인 영향을 미칩니다.


 

그렇다면 Garbage Collection을 사용하는 이유가 무엇인가?

자동 메모리 관리: 자바의 가비지 컬렉션은 개발자가 메모리 할당 및 해제에 대해 걱정할 필요 없이 자동으로 메모리를 관리합니다. 이는 프로그램의 안정성과 성능을 향상시키는 데 도움이 됩니다.

메모리 누수 방지: 가비지 컬렉션은 더 이상 사용되지 않는 객체를 자동으로 감지하여 제거함으로써 메모리 누수의 위험을 줄여줍니다. 이는 특히 장시간 실행되는 애플리케이션에서 중요합니다.

효율적인 메모리 사용: 가비지 컬렉션은 사용되지 않는 객체를 제거함으로써 메모리를 효율적으로 사용하고, 필요한 경우 새로운 객체에 대한 공간을 만들어줍니다.

애플리케이션 성능 향상: 정기적인 메모리 정리를 통해 애플리케이션의 전반적인 성능과 반응성이 향상될 수 있습니다.

프로그래밍의 단순화: 자동 메모리 관리는 개발자가 메모리 관리에 대한 복잡한 로직을 고려하지 않도록 도와줍니다. 이로 인해 개발자는 애플리케이션의 다른 중요한 측면에 더 집중할 수 있습니다.