본 포스팅은 우아한 테크코스 테코톡을 기반으로 작성되었습니다.
https://www.youtube.com/watch?v=8JrciOSL3Gk&list=PLgXGHBqgT2TvpJ_p9L_yZKPifgdBOzdVH&index=4
GC란?
메모리 해제 방법
C언어에서는 객체를 할당 하고 해제하기 위해서는
free라는 메소드를 직접적으로 호출하여 메모리를 해제하는 과정이 필요했습니다.
하지만, JAVA에서는 해당 메소드가 존재하지 않습니다.
JAVA에서는 메모리를 해제하는 과정을 누군가가 대신 해준다는 얘기입니다.
이러한 역할을 JAVA GC가 대신합니다.
Garbage Collector 역할
Root set
JVM내의 Heap 영역,
Method Area,
JNI 영역에 있는 지역 변수나 파라미터
그리고 정적 변수를 말합니다.
오렌지 색깔로 네모 표시된 부분이 Root Set입니다.
3. Root set과 어떠한 관계도 없다면, Unreachable 객체라고 표현하며 Heap 영역에서 제거합니다.
상단 이미지의 초록색, 오렌지색 네모칸을 제외한 Object들 제거.
GC 동작방법 - Mark And Sweep
1. Root set으로부터 Heap 영역의 모든 객체를 스캔하여 Reachable한 객체를 찾는다.
위의 과정을 Reachable한 객체를 찾아서 마킹한다고 하여 Mark라고 표현합니다.
2. Unreachable한 객체를 Heap 영역에서 제거한다.
Heap 영역에서 쓸어내린다고 표현하여 Sweep이라고 표현합니다.
이렇게 두가지 과정이 GC동작이라고 생각하면 됩니다.
Young generation, Old generation
- 영역을 나누어 일부의 메모리 영역만 스캔한다.
- 효율적으로 처리할 수 있다.
- 결과적으로 GC 비용을 줄일 수 있다.
오른쪽 그래프의 빨간색 박스부분을 보면
대부분 초반에 GC가 활발하게 진행이 되었고 메모리에서 해제가 되었다는것을 알 수 있습니다.
Minor GC - Young generation에서 발생하는 GC
young generation 영역은 Eden과 Survivor 영역으로 나뉩니다.
새로운 객체가 Eden에 계속 할당되게 되고 가득차게 된다면 Minor GC가 발생합니다.
Stop And Copy
위의 과정에서 단편화 문제를 해결하기 위해 무조건 비어있는 Survivor 영역으로 남은 객체를 옮깁니다.
위 과정들이 지속적으로 반복된다면. Age값이 증가하게 됩니다.
Promotion
age가 특정값 이상이 되면, Old generation으로 객체를 이동시키는 과정.
default age 값 31
Major GC - Old generation에서 발생하는 GC
위 과정들이 반복되다보면 Old generation 영역도 가득차게 됩니다.
이때 발생하는 GC가 Major GC 입니다.
추가적으로 공부하면 좋은 키워드
- JVM
'프로그래밍 공부 > JAVA' 카테고리의 다른 글
애너테이션(어노테이션) (0) | 2021.12.05 |
---|---|
바이트코드란? JVM이란? JIT컴파일러란? GC란? JVM 실행과정 (0) | 2021.09.03 |
빌드와 실행, Ant, Maven, Gradle 이란 무엇인가? (0) | 2021.09.03 |
JDK, JRE, JVM은 무엇인가? (0) | 2021.09.03 |
JAVA중급강의 정리 람다식 (0) | 2021.08.30 |