기록/정리
[Garbage collector] 가비지컬렉터 , 메모리 정리
코드코코
2021. 11. 29. 19:29
package main
import "fmt"
func add() *int {
//garbage collector : 불필요한 메모리를 정리해 줌.
//메모리가 정리되는 기준점 : 메모리(변수)가 필요 없어지는 순간
//즉, 'reference count = 0' 이 되는 순간 GC가 지움.
//reference count
var a int //1
var p *int
a = 3
p = &a //2
fmt.Println(*p)
//1.리턴되는 순간 메모리가 사라지는 것이아니라,
return p
}
func main() {
//2. 실행이 끝나는 순간 메모리가 정리됨.
v := add()
fmt.Println(v)
}
Garbage Collector : 불필요한 메모리를 자동으로 정리해 줌.
GC의 유무에 따라
managed language : JAVA, GO
unmanaged language : C , C++
C언어에서 GC
스택 메모리
- 변수는 스택메모리
- 변수의 생명주기에 맞는 스코프 범위를 벗어나면 메모리는 무조건 사라져야 함.
힙 메모리
- 프로그래머가 힙 메모리 할당 가능
- 할당방법은 malloc(사이즈)이용
- 그리고 사용하고 나서는 free로 수동으로 메모리 삭제하여 정리하여야 함.
메모리 관련 버그들
- memory leak: 흔히들 하는 실수.
- dangiling : 사라진 메모리를 참조하는 경우.
GC 특징
- 전수조사
- 하는 일이 많다.
- 메모리를 많이 사용한다.
- 속도가 느림
- 과거는 GC작동시 2~3초 가량 멈추는 경우도 있었지만, 멀티쓰레드의 발전으로 보완됨.
- GC가 무조건 memory leak를 막아주는 것은 아니다.
GO에서 GC
- 외딴섬 : reference count가 0 이 아님에도 외부에서 아무도 참조하지 않는 경우,
> a->b->c->a 서로를 카운터하지만, 외부에서는 아무도 a,b,c를 가르키는 것이 없다.
> memory leak에 해당하며, GC의 관리대상