티스토리 뷰
요리대가 일케 더러워지면 치우면서 작업을 해야되는데
옆에 똘똘한 애가 보고있다가 음! 비지통은 이제 다썼네 가져가야겠어, 하면서 치워줌
주방장 감동쓰~ ㅇㅏ..센스있는놈일쎄
자네 이름이 뭔가?

가...가비지컬렉터이옵니다.
조리대 = 메모리
즉 조리대가 다 찬건 메모리가 다 차버린것
조리대가 넓으면 이것저것 할 수 가 있다. = 램 메모리가 많으면 이거저거할 수 있다는거
우리가 코드를 짜는거 = 컾퓨터의 주방장(CPU)에게 레시피를 주는것
코드에 작성하는 변수,함수,객체 <- 메모리 공간을 차지하는애들
조리대에 얹어지는 재료와 도구
근데 주방장은 자기주도적이지못해서
레시피대로하다가 조리대가 다 차버리면 멘탈이 나감 드러누움
중간중간 치워줘야되는데 이전 오래된 언어들은 다 코드로 짰음 근데 휴먼은 완벽한 존재가 아님..ㅠㅠ
그걸 보완하려고 자바나 새로운 언어들은 가비지 컬렉터 를 도입하기 시작
쓸모없는애들은 메모리에서 치워버리는 = garbage 컬렉터
두가지 방식으로 일하는디
필요한것들만 마크하고 마크안된거는 버려버림 mark and sweep 방법
✔️ 트레이싱 : 루트에서 닿지않는 변수들을 치워버림
✔️ 레퍼런스 카운팅 : 몇번 참조되는지보고 0이면 치워버림
가비지도 한계가있는데
지워야할것들을 100프로잡지는 못한다.
좋은 프로그래머 그래서 메모리 누수 방지하기위해 모든 가비지컬렉터한테 맡기면안됨
크롬 브라우저 및 node.js의 v8 엔진의 가비지 컬렉팅
아래의 개념을 알고있으면 좋을것같다.
heap 프로파일러라고 => 메모리문제를 조사하기위한 도구가있다.
이걸 열어보면
Shallow size
Retained Size
이 두개를 볼 수 있는데 이것은 뭐냐?
Shallow size : 객체의 shallow 사이즈라는것은 객체 자체가. 그 자체가 저장되는 메모리의 양 (자신만을 얘기하며 참조하는것은 포함하지않는다.)
배열이 아닌것은 타입이나 해당객체가 가지고있는 필드 갯수에 따라서 크기가 달라진다고한다.
배열은 배열의 길이나, 기본자료형의 타입에 의존적이라고함
객체의 집합에 대한 shallow크기가 몇인가요? => 그냥 그 집합에있는 모든 shallow크기의 합을 구하면되다.
Retained Size : shallow + 해당 객체에서 직/간접적으로 접근가능한 객체의 크기를 합한것이다. 이 말인 즉 가비지 컬렉터에 의해서 해당 객체가 제거될 때 사라지는 메모리의 크기를 나타낸다. 음 어려운말이다.
두개가 비슷해보이지만 참조하는게 좀다르다
색칠되어 있는 객체들은 obj1에서만 직/간접적으로 접근가능한 애들
그림1에서 obj3가 색칠이 안된 이유는 gc 루트를 참조하기때문이다.
- 그림 1 : obj1,2,4의 shallow size의 합
- 그림 2 : obj1,2,3,4의 shallow size의 합
- 그림 1 : obj2, 4의 shallow size의 합
- 그림 2 : obj2,3,4의 shallow size의 합
Memory for new JavaScript objects is allocated from a dedicated JavaScript heap (or VM heap). These objects are managed by V8's garbage collector and therefore, will stay alive as long as there is at least one strong reference to them.
=> 새로운 객체는 VM heap에 할당되고, V8의 가비지컬렉터가 관리하는데. 하나라도 참조가 되면 가비지컬렉터가 그냥 냅두는거.
참조안하면 치워버리는거.
다시 돌아와서
V8 엔진의 메모리 구조
Resident Set - 실행 중인 프로그램은 V8 프로세스에서 할당된 일정량의 메모리로 표현됨
프로그램이 사용 가능한 것보다 더 많은 메모리를 힙에 할당하려고 할 때 메모리 부족 오류가 발생한다. 힙이 잘못 관리되면 메모리 누수가 발생할 수 있다.
V8 엔진은 가비지 컬렉션을 사용해 힙 메모리를 관리 한다.
참조 없는 객체(orphan object): 스택으로부터 (다른 객체 내부의 참조를 통해) 더 이상 직접 혹은 간접적으로 참조되지 않는 객체
참조없는 객체는 치워버린다.
가비지 컬렉터 : V8 프로세스에서 재사용하기 위해 사용되지 않은 메모리를 회수
'백엔드&컴퓨터사이언스' 카테고리의 다른 글
[네트워크] HTTP 헤더 (컨텐츠타입은 중요허다.) (0) | 2022.01.03 |
---|---|
[네트워크] TCP UDP (0) | 2022.01.03 |
[컴퓨터공학] 운영체제 (0) | 2021.12.30 |
[컴퓨터공학] 인코딩,유니코드,UTF-8이 뭐람 (0) | 2021.12.30 |
[인증/보안] 세션 vs 토큰 JWT (0) | 2021.12.28 |