V8 엔진의 가비지 컬렉션
Harimkim
기본적으로 브라우저가 메모리를 자동으로 정리해주고 있지만, 개발자들이 메모리 최적화에 신경쓰지 않으면 가비지 컬렉션이 자주 실행되어 사용자 경험이 저하될 수 있습니다. 브라우저의 딥한 내부 동작을 알아두면 언젠가 면접에서 써먹을 수도 있기 때문에 개발자분들은 한 번 훑고 지나가시면 좋습니다.
가비지 컬렉션의 핵심은 '죽은' 객체로부터 메모리를 확보하는 것이다.
자바스크립트의 경우 단일 스레드이고 스레드 간 동기화 메커니즘이 없기 때문에 전체 객체 추적을 정기적으로 수행하면 지연과 성능 저하가 발생할 가능성이 높다.
V8 팀은 이러한 한계를 극복하기 위해 '세대' 개념을 도입했다.
젊은 세대: 새로 할당된 객체들은 젊은 세대로 구분되며, 마이너 GC를 통해 수행된다.
노년 세대: 오래된 객체들은 노년 세대로 구분되며, 메이저 GC를 통해 수행된다.
메이저 GC는 보통 마이너 GC보다 더 많은 시간이 소요된다. 심하면 성능 저하가 일어나기도 한다. 개발자들이 메모리 최적화를 잘하면 메이저 GC 발생 빈도를 줄일 수 있다.
브라우저는 웹 페이지가 비활성화됬을 때 몰래(?) 메이저 GC를 수행하는 식으로 최적화를 해두었다. V8에서는 이 작업을 하는 친구를 메모리 리듀서라고 부른다.
https://www.harimkim.com/articles/2.%20Area/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C%20%EA%B0%9C%EB%B0%9C/Web%20%EC%84%B1%EB%8A%A5%20%EC%B5%9C%EC%A0%81%ED%99%94/V8%20%EC%97%94%EC%A7%84%EC%9D%98%20%EA%B0%80%EB%B9%84%EC%A7%80%20%EC%BB%AC%EB%A0%89%EC%85%98
다음 내용이 궁금하다면?
이미 회원이신가요?
2024년 4월 10일 오전 6:36
외국어를 사용해서? 돈을 더 많이 벌어서? 새로운 기회가 많아서? 글로벌 경력을 쌓을 수 있어서?
... 더 보기코
... 더 보기매
... 더 보기