본문 바로가기
Study/Go

[Go] GC(Garbage Collector)

by _royJang 2021. 7. 18.

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) 심화

 

[Go] GC(Garbage Collection) 심화

내가 참조하고 있는 글은 2019년에 Go 1.12v 때, 포스팅 된 글 이므로 최근의 Go와 다를 수 있다. 내가 알기론 STW도 제거하기 위해 시도하고 있다고 들었는데.. 이또한 찾아보아야겠다. GC가 실행될 때

roy-jang.tistory.com