https://www.youtube.com/watch?v=vZRmCbl871I
| JVM
Java Virtual Machine
운영체제의 메모리 영역에 접근하여 메모리를 관리하는 프로그램
메모리 관리 Garbage Collector
| Garbage Collector
동적으로 할당한 메모리 영역 중 사용하지 않는 영역을 탐지하여 해제하는 기능
| Stack, Heap
Stack
정적으로 할당한 메모리 영역
원시 타입의 데이터가 값과 함께 할당, Heap영역에 생성된 Object 타입의 데이터의 참조 값 할당
Heap
동적으로 할당한 메모리 영역
모든 Object 타입의 데이터가 할당, Heap영역의 Object를 가리키는 참조 변수가 Stack에 할당
ex)
public class Exam01{
public static void main(String[] args){
int a = 5;
int b = 20;
int sum = a + b;
double pi = 3.14;
String str = "시험";
System.out.println(sum);
System.out.println(str);
}
}
이와 같은 코드에서 각 데이터 값이 Stack에 저장

main 메서드가 종료 시 Stack 영역의 데이터는 날아가고 Heap의 객체 데이터만 남아있는데 이를 Reachable Object라고 한다.
| Garbage Collecor 과정(Mark and Sweep)
Mark
1) Garbage Collector가 Stack의 모든 변수를 스캔하면서 각각 어떤 객체를 참조하고 있는지 찾아서 마킹
2) Reachable Object가 참조하고 있는 객체도 찾아서 마킹
Sweep
3) 마킹되지 않은 객체를 Heap에서 제거함(Sweep)
| Heap
New Generation 영역
1) Eden 영역
Heap영역에서 Eden영역에 새로운 객체 할당
에덴 영역이 메모리가 사용이 되었으면 가비지 콜렉터(GC 발생(Minor))가 일어남
Eden영역에 객체가 다 할당 되었을 때 Mark and Sweep 과정이 일어나고 살아남은 객체는 survival 영역으로 옮겨짐.
에덴 영역의 unreachable객체는 메모리에서 해제
과정 반복 >>
2) Survival 0 영역
survival영역이 객체가 다 옮겨져 꽉 차게 되면 survival 0 영역에 대해 Mark and Sweep 과정이 일어남
survival 0에서 살아남은 객체는 survival 1로 이동, 이동한 객체는 Age값 증가
과정 반복 >>
3) Survival 1 영역
survival 0 영역에 있던 객체는 survival 1영역으로 옮겨지며
eden영역의 unreachable 객체는 메모리에서 해제
Age 값이 특정 값 이상이 되면 Old Generation 영역으로 옮겨짐 = promotion 과정
Old Generation 영역
Old Generation 영역이 가득차면 GC 실행 (Major)
> New Generation에서 Old Generation 영역에 대한 과정이 반복되면서 Garbage Collector가 메모리를 관리
| Garbage Collector 종류
1. Serial GC
GC를 처리하는 스레드가 1개
CPU 코어가 1개만 있을 때 사용하는 방식
Mark-Compact collection 알고리즘 사용
2. Parallel GC
GC를 처리하는 스레드가 여러개
Serial GC보다 빠르게 객체를 처리할 수 있음
Parallel GC는 메모리가 충분하고 코어의 개수가 많을 때 사용하면 좋음
3. Concurrent Mark Sweep GC(CMS GC)
Stop The World를 줄임으로써 속도/응답이 중요한 애플리케이션에 사용하도록 한 GC
Stop The World 시간이 짧음.
애플리케이션의 응답 시간이 빨라야 할 때 CMS GC를 사용
다른 GC 방식보다 메모리와 CPU를 더 많이 사용
Compaction 단계가 제공되지 않음
*Stop-The-World
GC을 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것
Stop The World가 발생하면 GC를 실행하는 스레드를 제외한 나머지 스레드는 모두 작업을 멈춤
GC작업을 완료한 이후에 중단한 작업을 다시 시작
4. G1 GC
각 영역을 Region 영역으로 나눔
GC가 일어날 때, 전체영역(Eden, Survival, Old Generation)을 탐색하지 않는다.
G1 GC는 바둑판의 각 영역에 객체를 할당하고 GC를 실행한다.
해당 영역이 꽉 차면 다른 빈 영역에 객체를 할당하고 GC를 실행한다.
G1 GC는 다른 STW 시간이 짧다
Compaction을 사용한다.
'IT Study > YouTube 영상 후기' 카테고리의 다른 글
10분 테코톡 - MVC 패턴 2 (0) | 2022.12.24 |
---|---|
10분 테코톡 - MVC 패턴 1 (0) | 2022.12.24 |
10분 테코톡 - OOP(객체지향 프로그래밍) (0) | 2022.12.23 |
10분 테코톡 - 빌드와 배포 (0) | 2022.12.23 |
10분 테코톡 - 빌드 용어 정리 (0) | 2022.12.23 |
댓글