GC(Garbage Collector)
Memory Garbage를 제거하는 역할
사용하지 않는 Memory를 차지하는 것들을 삭제
작동방식
쓸모없어지면 쓰레기로 판단
- reference count == 0일 때.
func add(){ var a int a = 20 }// 이 밖으로 나간다면 a변수의 reference count는 0이 됨 -> 쓸모가 없어짐
- 주솟값들이 서로를 가리켜 순환 형태를 이루는 외딴섬 형태를 이룰 때.
a = b; b = c; c = a;
단점
- 느림.
- 버그 안만들면 됨.(C&&C++ 변태들 발언).
- GC가 잡지 못하는 leak이 있긴 함(개발자의 실수).
- 사용하지 않는 배열의 memory.
장점
- 귀찮은 일은 GC에게 맡겨 개발자의 생산성 향상.
- GC가 활동을 짧게 짧게 하여 개발자가 끊김을 느끼기 힘듦.
C && C++과 Go의 차이
C && C++ : GC 없음
C && C++
int* add(){
int a;
a = 3;
int* p;
p = &a;
return p;
}
int* v = add();
//1. a memory 할당
//2. a memory에 값 전달
//3. p memory 할당
//4. a memory에 값 전달
//5. v memory 할당
//6. v memory에 a memory값을 전달하려 했으나 이미 삭제된 memory.. -> dangling reference
Go : GC 있음
Go
func add() *int{
var a int
a = 3
var p *int
p = &a
return p
}
v := add() // 여기서 GC가 활동.
//1. a memory의 reference 카운터 : 1
//2. p memory의 reference 카운터 : 1
//3. a memory의 reference 카운터 : 2
//4. v memory의 reference 카운터 : 1
//5. a memory의 reference 카운터 : 3
//6. a memory의 reference 카운터 : 2
//7. p memory의 reference 카운터 : 0 -> garbage memory
//8. GC가 reference 카운터가 0인 p memory 제거
+++
2022.08.05 - [Study/Go] - [Go] GC(Garbage Collection) 심화
'Study > Go' 카테고리의 다른 글
[Go] 고루틴(Goroutine) 알고쓰기(1) - 동시성, 병렬성 프로그래밍 그리고 고루틴 (0) | 2021.09.01 |
---|---|
[Go] Json 활용 방법 (0) | 2021.08.12 |
[Go] 웹 서버(Web Server) 열기 (0) | 2021.07.27 |
[Go] Slice와 Array 알고 쓰기 (0) | 2021.07.21 |
[Go] C++ 과 Go 포인터의 차이 (0) | 2021.07.17 |