> 백엔드 개발 > Golang > golang에서 맵 메모리를 해제하는 방법은 무엇입니까?

golang에서 맵 메모리를 해제하는 방법은 무엇입니까?

coldplay.xixi
풀어 주다: 2020-07-18 15:03:06
원래의
12095명이 탐색했습니다.

Golang의 맵 메모리 해제 방법: 먼저 맵의 모든 키를 삭제하고 맵이 차지하는 메모리는 여전히 [사용된 상태]입니다. 그런 다음 맵을 nil로 설정하고 맵이 차지하는 메모리는 [유휴 상태]입니다. ]; 마지막으로 유휴 상태의 메모리는 반드시 운영체제에 다시 적용할 필요 없이 다음 번에 적용 시간을 재사용할 수 있습니다.

golang에서 맵 메모리를 해제하는 방법은 무엇입니까?

Golang의 맵 메모리 해제 방법:

샘플 코드:
go 버전: 1.12.9

package main
import (
    "log"
    "runtime"
)
var intMap map[int]int
var cnt = 8192
func main() {
    printMemStats()
    initMap()
    runtime.GC()
    printMemStats()
    log.Println(len(intMap))
    for i := 0; i < cnt; i++ {
        delete(intMap, i)
    }
    log.Println(len(intMap))
    runtime.GC()
    printMemStats()
    intMap = nil
    runtime.GC()
    printMemStats()
}
func initMap() {
    intMap = make(map[int]int, cnt)
    for i := 0; i < cnt; i++ {
        intMap[i] = i
    }
}
func printMemStats() {
    var m runtime.MemStats
    runtime.ReadMemStats(&m)
    log.Printf("Alloc = %v TotalAlloc = %v Sys = %v NumGC = %v\n", m.Alloc/1024, m.TotalAlloc/1024, m.Sys/1024, m.NumGC)
}
로그인 후 복사

출력 결과:

2019/11/22 15:42:33 Alloc = 138 TotalAlloc = 138 Sys = 68290 NumGC = 0
2019/11/22 15:42:33 Alloc = 456 TotalAlloc = 460 Sys = 68610 NumGC = 1
2019/11/22 15:42:33 8192
2019/11/22 15:42:33 0
2019/11/22 15:42:33 Alloc = 458 TotalAlloc = 464 Sys = 68674 NumGC = 2
2019/11/22 15:42:33 Alloc = 146 TotalAlloc = 466 Sys = 68674 NumGC = 3
로그인 후 복사

필드 설명:

  • 할당: 현재 힙의 개체가 차지하는 메모리 크기 Alloc:     当前堆上对象占用的内存大小;

  • TotalAlloc:堆上总共分配出的内存大小;

  • Sys:       程序从操作系统总共申请的内存大小;

  • NumGC

  • TotalAlloc: 힙에 할당된 총 메모리 크기

Sys 운영 체제에서 시작합니다. 요청된 총 메모리 크기

NumGC: 가비지 수집 실행 횟수입니다.

실행 결과를 보면 맵의 키를 삭제한 후 차지했던 메모리가 해제되지 않은 것을 알 수 있습니다.
🎜🎜결론: 🎜🎜Golang의 맵은 키가 삭제된 직후에 메모리를 해제하지 않으므로 프로그램이 실행됨에 따라 맵이 차지하는 메모리는 실제로 점점 더 커질 것입니다. 또한 GC는 마킹 단계에서 맵의 모든 요소에 액세스하므로 맵이 매우 클 경우 프로그램 성능에 매우 큰 오버헤드가 발생합니다. 그러나 Go 버전 1.5 이후에는 맵의 키와 값에 포인터가 포함되어 있지 않으면 GC는 맵을 무시합니다. 🎜🎜🎜관련 학습 권장사항: 🎜Go 언어 튜토리얼🎜🎜🎜

위 내용은 golang에서 맵 메모리를 해제하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿