꾸준히
[TIL-187] 2024 New 최찬혁
무자비한 낭만주먹
2024. 1. 8. 07:25
목차
0. 오늘의 학습 시간
1. 오늘 배운 것
2. 오늘의 알고리즘
3. 오늘의 CS
4. 영어 받아쓰기
5. 내일 할 일 (청사진)
6. 감사한 일
0. 오늘의 학습 시간
09:00 ~ 12:00: 아침 공부
14:00 ~ 16:00: 본가 가는 기차서 공부
1. 오늘 배운 것
- 자바의 GC 기초
- 부산 항구쪽 건물들을 보면서 이런저런 생각을 했다.
2. 오늘의 알고리즘
윈도우 사이징 문제를 풀었다.
3. 이주의 CS
[2024-01-01]
- JVM의 메모리에서 'Heap, Method'영역을 제외한 나머지 영역은 공유되는게 아니다.
- 스택 영역의 경우 '쓰레드 마다' 런타입 스택이란 걸 만들고 스택 프레임을 쌓는다. (여기서 스택 프레임은 메서드 콜을 의미함)
- 결국 쓰레드마다 스택 안에 메서드 콜 정보를 쌓는다는 의미
- 에러 났을 때 보면 에러 내용이 스택 형식으로 적재되지 않은가, 그 얘기다.
- 그놈에 PC는 결국 스택 프레임을 가르키는 놈인데, 스택 프레임이 아까 뭐라고했는지 기억 나는가? 메서드 콜이다.
- 결국 PC는 메서드 콜 위치를 가르키는 놈이다.
- 클래스 로더가 하는 일은 결국에 클래스 파일을 바이트 코드로 번역하고 static 값들을 메모리에 적재하는 것 까지이다.
- 이건 중요한 건 아니지만, 클래스 레벨에서 new 한 객체들은 사실 심볼릭 메모리 레퍼런스라고 해서 논리적으로만 생성된다.
- Stop-The-World는 GC가 동작하는 동안 다른 작업이 멈추는 현상을 의미하는데
- 이는 메모리를 효율적으로 비우기 위해 메모리의 상태가 변하면 안되는 경우에 이렇다.
- 그래서 이 STW는 서비스에 영향을 끼칠 수 있고 이 시간을 최소화하는 것이 필요하다.
- 주로 에덴 영역을 거쳐 OLD 영역으로 넘어온 경우에 이와 관련된 문제가 생긴다.
- 또한 GC는 실시간성이 중요한 서비스에 좋지 못한 선택이 될 수 있다.
- 그래서 이 GC를 어떻게 효율적으로 튜닝할 건지에 대한 내용이 GC 튜닝이다.
- GC는 어떤 Object를 Garbage로 판단하느냐는 Reachable이라는 개념을 이용한다.
- 결국 참조되냐 참조되지 않냐 여부를 보고 지운다는건데, 간단히 얘기하면 Stack이나 Method 영역에 참조되고 있지 않는 객체를 Garbage로 판단한다.
- 옛날 GC는 YOUNG와 OLD 영역으로 나눴고, YOUNG 영역을 OLD 영역에 비해 작게 만들었다.
- 이에 대한 근거는 대부분의 객체는 오래 남아있지 않는다는 이유 때문이었다. 이렇게 작은 영역(YOUNG)에 대한 GC라고 해서
우리는 이를 Minor GC 라고 불렀다.
- 반대로 OLD 영역에 대한 GC는 Major GC라고 부른다.
- 사실 STW문제는 GC 알고리즘에 따라 YOUNG영역에서도 충분히 발생할 수 있다.
- 최근 사용되고 있는 GC는 1.9부터 디폴트가 된 G1 GC이다.
4. 오늘의 무자막 시청
오늘의 영상: chat gpt 활용한 학습 방법에 대한 영어 유튜브를 봤다. 사실 별 내용 없는 건 우리나라나 외국이나 똑같은 거 같다.
5. 내일 할 일 (청사진)
- 멘토링 준비 끝내기
- 발표 흐름 작성
- 발표 연습
6. 감사한 일
새해 첫날부터 기쁘게 공부할 수 있어 크게 감사하다.
오늘 하루도 공부할 수 있어 크게 감사합니다
2024-01-01 개발자 최찬혁