golang map 删除key后内存不会自动释放,内存泄漏问题
全局map ,会有内存释放问题
-
package main
-
-
import (
-
"fmt"
-
"github.com/thoas/go-funk"
-
"math"
-
"runtime"
-
)
-
-
var m = map[int]int{}
-
-
func fillMap() {
-
for i := 0; i < 10000000; i {
-
m[funk.RandomInt(0, math.MaxInt)] = 1
-
}
-
-
}
-
func clearMap() {
-
for k, _ := range m {
-
delete(m, k)
-
}
-
}
-
-
func printAlloc(prefix string) {
-
-
//runtime.KeepAlive(m) // Keeps a reference to m so that the map isn’t collected
-
-
var memStats runtime.MemStats
-
runtime.ReadMemStats(&memStats)
-
fmt.Printf("%s %d KB\n", prefix, memStats.Alloc/1024)
-
-
}
-
func main() {
-
printAlloc("0 init")
-
-
i := 0
-
for {
-
fillMap()
-
i
-
printAlloc(fmt.Sprintf("%d after fillMap", i))
-
-
clearMap()
-
i
-
printAlloc(fmt.Sprintf("%d after clearMap", i))
-
runtime.GC()
-
i
-
printAlloc(fmt.Sprintf("%d after clearMap and runtime.GC()", i))
-
}
-
}
运行结果:
-
0 init 122 KB
-
1 after fillMap 498465 KB
-
2 after clearMap 498465 KB
-
3 after clearMap and runtime.GC() 314553 KB
-
4 after fillMap 332361 KB
-
5 after clearMap 332361 KB
-
6 after clearMap and runtime.GC() 328193 KB
-
7 after fillMap 345168 KB
-
8 after clearMap 345168 KB
-
9 after clearMap and runtime.GC() 343024 KB
-
10 after fillMap 359844 KB
-
11 after clearMap 359844 KB
-
12 after clearMap and runtime.GC() 357156 KB
-
13 after fillMap 374176 KB
-
14 after clearMap 374176 KB
-
15 after clearMap and runtime.GC() 370808 KB
-
16 after fillMap 388154 KB
-
17 after clearMap 388154 KB
-
18 after clearMap and runtime.GC() 383938 KB
-
19 after fillMap 401954 KB
-
20 after clearMap 401954 KB
-
21 after clearMap and runtime.GC() 396682 KB
-
22 after fillMap 407494 KB
-
23 after clearMap 407494 KB
-
24 after clearMap and runtime.GC() 407494 KB
-
25 after fillMap 417683 KB
-
26 after clearMap 417683 KB
-
27 after clearMap and runtime.GC() 417683 KB
-
28 after fillMap 435607 KB
-
29 after clearMap 435607 KB
-
30 after clearMap and runtime.GC() 429015 KB
-
31 after fillMap 438173 KB
-
32 after clearMap 438173 KB
-
33 after clearMap and runtime.GC() 438173 KB
-
34 after fillMap 446853 KB
-
35 after clearMap 446853 KB
-
36 after clearMap and runtime.GC() 446853 KB
-
37 after fillMap 465331 KB
-
38 after clearMap 465331 KB
-
39 after clearMap and runtime.GC() 457083 KB
-
40 after fillMap 464851 KB
-
41 after clearMap 464851 KB
-
42 after clearMap and runtime.GC() 464851 KB
-
43 after fillMap 472132 KB
-
44 after clearMap 472132 KB
-
45 after clearMap and runtime.GC() 472132 KB
-
46 after fillMap 479040 KB
-
47 after clearMap 479040 KB
-
48 after clearMap and runtime.GC() 479040 KB
-
49 after fillMap 485612 KB
-
50 after clearMap 485612 KB
-
51 after clearMap and runtime.GC() 485612 KB
-
52 after fillMap 504711 KB
-
53 after clearMap 504711 KB
-
54 after clearMap and runtime.GC() 494399 KB
如上所示,map的key删除后,还会占用空间,导致map的空间不断增加。
针对map不会重新释放,重新创建新map可以解决,内存释放问题
-
package main
-
-
import (
-
"fmt"
-
"github.com/thoas/go-funk"
-
"math"
-
"runtime"
-
)
-
-
func fillMap(m map[int]int) {
-
for i := 0; i < 10000000; i {
-
m[funk.RandomInt(0, math.MaxInt)] = 1
-
}
-
-
}
-
func clearMap(m map[int]int) {
-
for k, _ := range m {
-
delete(m, k)
-
}
-
}
-
-
func printAlloc(prefix string) {
-
-
//runtime.KeepAlive(m) // Keeps a reference to m so that the map isn’t collected
-
-
var memStats runtime.MemStats
-
runtime.ReadMemStats(&memStats)
-
fmt.Printf("%s %d KB\n", prefix, memStats.Alloc/1024)
-
-
}
-
func main() {
-
printAlloc("0 init")
-
var m = map[int]int{}
-
i := 0
-
for {
-
if i%100 == 0 {
-
m = map[int]int{}
-
i
-
runtime.GC()
-
printAlloc(fmt.Sprintf("%d after m = map[int]int{}", i))
-
-
}
-
-
fillMap(m)
-
i
-
printAlloc(fmt.Sprintf("%d after fillMap", i))
-
-
clearMap(m)
-
i
-
printAlloc(fmt.Sprintf("%d after clearMap", i))
-
runtime.GC()
-
i
-
printAlloc(fmt.Sprintf("%d after clearMap and runtime.GC()", i))
-
}
-
}
输入如下:
-
0 init 121 KB
-
1 after m = map[int]int{} 117 KB
-
2 after fillMap 498515 KB
-
3 after clearMap 498515 KB
-
4 after clearMap and runtime.GC() 314553 KB
-
5 after fillMap 332244 KB
-
6 after clearMap 332244 KB
-
7 after clearMap and runtime.GC() 328076 KB
-
8 after fillMap 345079 KB
-
9 after clearMap 345079 KB
-
10 after clearMap and runtime.GC() 342934 KB
-
11 after fillMap 359783 KB
-
12 after clearMap 359783 KB
-
13 after clearMap and runtime.GC() 357095 KB
-
14 after fillMap 374098 KB
-
15 after clearMap 374098 KB
-
16 after clearMap and runtime.GC() 370730 KB
-
17 after fillMap 388076 KB
-
18 after clearMap 388076 KB
-
19 after clearMap and runtime.GC() 383860 KB
-
20 after fillMap 401836 KB
-
21 after clearMap 401836 KB
-
22 after clearMap and runtime.GC() 396564 KB
-
23 after fillMap 407414 KB
-
24 after clearMap 407414 KB
-
25 after clearMap and runtime.GC() 407414 KB
-
26 after fillMap 417595 KB
-
27 after clearMap 417595 KB
-
28 after clearMap and runtime.GC() 417595 KB
-
29 after fillMap 435503 KB
-
30 after clearMap 435504 KB
-
31 after clearMap and runtime.GC() 428911 KB
-
32 after fillMap 438066 KB
-
33 after clearMap 438066 KB
-
34 after clearMap and runtime.GC() 438066 KB
-
35 after fillMap 446692 KB
-
36 after clearMap 446692 KB
-
37 after clearMap and runtime.GC() 446692 KB
-
38 after fillMap 465169 KB
-
39 after clearMap 465169 KB
-
40 after clearMap and runtime.GC() 456920 KB
-
41 after fillMap 464680 KB
-
42 after clearMap 464680 KB
-
43 after clearMap and runtime.GC() 464680 KB
-
44 after fillMap 472034 KB
-
45 after clearMap 472034 KB
-
46 after clearMap and runtime.GC() 472034 KB
-
47 after fillMap 478964 KB
-
48 after clearMap 478964 KB
-
49 after clearMap and runtime.GC() 478964 KB
-
50 after fillMap 485536 KB
-
51 after clearMap 485536 KB
-
52 after clearMap and runtime.GC() 485537 KB
-
53 after fillMap 504625 KB
-
54 after clearMap 504625 KB
-
55 after clearMap and runtime.GC() 494313 KB
-
56 after fillMap 500154 KB
-
57 after clearMap 500154 KB
-
58 after clearMap and runtime.GC() 500155 KB
-
59 after fillMap 505737 KB
-
60 after clearMap 505737 KB
-
61 after clearMap and runtime.GC() 505737 KB
-
62 after fillMap 510983 KB
-
63 after clearMap 510983 KB
-
64 after clearMap and runtime.GC() 510983 KB
-
65 after fillMap 515936 KB
-
66 after clearMap 515937 KB
-
67 after clearMap and runtime.GC() 515936 KB
-
68 after fillMap 520646 KB
-
69 after clearMap 520646 KB
-
70 after clearMap and runtime.GC() 520646 KB
-
71 after fillMap 525081 KB
-
72 after clearMap 525081 KB
-
73 after clearMap and runtime.GC() 525081 KB
-
74 after fillMap 529315 KB
-
75 after clearMap 529315 KB
-
76 after clearMap and runtime.GC() 529315 KB
-
77 after fillMap 533324 KB
-
78 after clearMap 533324 KB
-
79 after clearMap and runtime.GC() 533323 KB
-
80 after fillMap 537098 KB
-
81 after clearMap 537098 KB
-
82 after clearMap and runtime.GC() 537098 KB
-
83 after fillMap 556805 KB
-
84 after clearMap 556805 KB
-
85 after clearMap and runtime.GC() 543909 KB
-
86 after fillMap 547256 KB
-
87 after clearMap 547256 KB
-
88 after clearMap and runtime.GC() 547256 KB
-
89 after fillMap 550451 KB
-
90 after clearMap 550451 KB
-
91 after clearMap and runtime.GC() 550451 KB
-
92 after fillMap 553470 KB
-
93 after clearMap 553470 KB
-
94 after clearMap and runtime.GC() 553470 KB
-
95 after fillMap 556316 KB
-
96 after clearMap 556316 KB
-
97 after clearMap and runtime.GC() 556316 KB
-
98 after fillMap 558999 KB
-
99 after clearMap 558999 KB
-
100 after clearMap and runtime.GC() 558999 KB
-
101 after m = map[int]int{} 120 KB
-
102 after fillMap 498491 KB
-
103 after clearMap 498492 KB
-
104 after clearMap and runtime.GC() 314557 KB
-
105 after fillMap 332393 KB
-
106 after clearMap 332394 KB
-
107 after clearMap and runtime.GC() 328225 KB
-
108 after fillMap 345197 KB
-
109 after clearMap 345197 KB
-
110 after clearMap and runtime.GC() 343053 KB
-
111 after fillMap 359880 KB
-
112 after clearMap 359880 KB
-
113 after clearMap and runtime.GC() 357192 KB
重置后,内存恢复120KB:101 after m = map[int]int{} 120 KB
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgfbcbf
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01