간단이론정리/JAVA

가비지 컬렉션 (GC, Garbage Collection) (1)

눕고싶은사람 2024. 6. 15. 14:35

가비지 컬렉션 (GC, Garbage Collection)이란?

자바의 메모리 관리 방식, JVM의 Heap 영역에서 동적으로 할당했던 메모리 중 필요 없게 된 메모리 객체(garbage)를 모아 주기적으로 제거하는 프로세스를 말한다.

가비지 컬렉터가 메모리 관리를 대행해 주기 때문에 Java 프로세스가 한정된 메모리를 효율적으로 사용할 수 있게 하고, 개발자 입장에서 메모리 관리, 메모리 누수(Memory Leak) 문제에서 대해 관리하지 않아도 되어 개발에만 집중할 수 있다는 장점이 있다. 


가비지 컬렉션이 대상을 선정하는 방법

가비지 컬렉션은 특정 객체가 garbage인지 아닌지 판단하기 위해서 도달성, 도달능력(Reachability) 이라는 개념을 적용한다.

객체에 대해 레퍼런스가 있다면 Reachable로 구분되고, 객체에 유효한 레퍼런스가 없다면 Unreachable로 구분해 버리고 수거해 버린다

  • Reachable: 객체가 참조되고 있는 상태
  • Unreachable : 객체가 참조되고 있지 않은 상태 (GC의 대상)

https://jellili.tistory.com/60

JVM 메모리에서는 객체들은 실질적으로 Heap영역에서 생성되고 Method Area이나 Stack Area 에서는 Heap Area에 생성된 객체의 주소만 참조하는 형식으로 구성된다.

하지만, 이렇게 생성된 Heap Area의 객체들이 메서드가 끝나는 등의 특정 이벤트들로 인하여 Heap Area 객체의 메모리 주소를 가지고 있는 참조 변수가 삭제되는 현상이 발생하면, 위의 그림에서의 Object3 같이 Heap영역에서 어디서든 참조하고 있지 않은 객체(Unreachable)들이 발생하게 된다.

이런 Unreachable 객체들을 가비지 컬렉션의 대상으로 선정한다.


가비지 컬렉션이 선정한 대상을 지우는 방법

  1. Stop The World
  2. Mark And Sweep

1. Stop The World

Stop The World는 가비지 컬렉션을 실행하기 위해 JVM이 애플리케이션의 실행을 멈추는 작업이다. GC가 실행될 때는 GC를 실행하는 쓰레드를 제외한 모든 쓰레드들의 작업이 중단되고, GC가 완료되면 작업이 재개된다. 모든 쓰레드들의 작업이 중단되면 애플리케이션이 멈추기 때문에, GC의 성능 개선을 위해 튜닝을 한다고 하면 보통 stop-the-world의 시간을 줄이는 작업을 하는 것이다. 또한 JVM에서도 이러한 문제를 해결하기 위해 다양한 실행 옵션을 제공하고 있다.

 

2. Mark And Sweep

  • Mark : 사용되는 메모리와 사용되지 않는 메모리를 식별하는 작업
  • Sweep : Mark 단계에서 사용되지 않음으로 식별된 메모리를 해제하는 작업

https://jellili.tistory.com/60

 

  • Compation : Sweep 후에 분산된 객체들을 Heap의 시작 주소로 모아 메모리가 할당된 부분과 그렇지 않은 부분으로 압축한다. 

Mark and Sweep은 가비지 대상을 식별하고 제거한 후 빈 공간을 채워 나가는 방식인 것이다.


 

출처 및 참고

https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EA%B0%80%EB%B9%84%EC%A7%80-%EC%BB%AC%EB%A0%89%EC%85%98GC-%EB%8F%99%EC%9E%91-%EC%9B%90%EB%A6%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%F0%9F%92%AF-%EC%B4%9D%EC%A0%95%EB%A6%AC

 

☕ 가비지 컬렉션 동작 원리 & GC 종류 💯 총정리

Garbage Collection(GC) 이란? 가비지 컬렉션(Garbage Collection, 이하 GC)은 자바의 메모리 관리 방법 중의 하나로 JVM(자바 가상 머신)의 Heap 영역에서 동적으로 할당했던 메모리 중 필요 없게 된 메모리 객

inpa.tistory.com

https://jellili.tistory.com/60

 

[JAVA] 자바 가비지 컬렉션(GC, Garbage Collection) 총정리 - 개념, 배경, 동작원리, 종류

자바 가비지 컬렉션(GC, Garbage Collection) 기본 개념 가비지 컬렉션(GC, Garbage Collection)이란? 자바 가상 머신(JVM)에 의해 구동되는 자바 프로그램은 메모리 관리를 개발자가 직접 명시적으로 수행하지

jellili.tistory.com

https://mangkyu.tistory.com/118

 

[Java] Garbage Collection(가비지 컬렉션)의 개념 및 동작 원리 (1/2)

1. Garbage Collection(가비지 컬렉션)이란? [ Garbage Collection(가비지 컬렉션)이란? ] 프로그램을 개발 하다 보면 유효하지 않은 메모리인 가바지(Garbage)가 발생하게 된다. C언어를 이용하면 free()라는 함

mangkyu.tistory.com

 

'간단이론정리 > JAVA' 카테고리의 다른 글

Checked Exception & Unchecked Exception  (0) 2024.07.26
about Java 17  (0) 2024.06.13
about Java 11  (0) 2024.06.13
JAVA의 Wrapper Class와 Boxing & UnBoxing  (0) 2024.06.12
JAVA 변수의 기본형 & 참조형 정리  (0) 2024.06.12