内存管理
大约 1 分钟
栈内存管理
- 先进后出
- 内存空间大小在编译时确定
- 速度快
- 栈内存主要用于存储局部变量、函数参数等临时数据。
- 编译器管理
堆内存管理
- 后进先出
- 内存空间大小在运行时确定
- 速度较慢
- 堆内存主要用于存储动态分配的数据。
- 运行时系统管理
- 可以通过new关键字来分配堆内存(Go中new出来的对象可不一定分配在堆上)
- 堆内存管理采用了垃圾回收机制,由内存分配器和垃圾收集器
- 内存分配器采用了TCMalloc(Thread-Caching Malloc)的设计思想
- 内存分配器负责分配堆内存
- 垃圾收集器采用了标记-清除算法
垃圾收集器工作原理(回收不再使用的堆内存)(基于三色标记和写屏障的混合算法)
- 标记所有存活的对象
- 清除所有未标记的对象
- 垃圾收集器是并发的(在程序运行的同时进行回收工作,聊聊如何实现的)
Go语言内存管理的最佳实践(提高Go语言程序的内存管理效率)
- 尽量使用局部变量
- 避免使用全局变量
- 及时释放不再使用的内存
- 使用make关键字来分配切片、映射等复合类型的数据
- 使用sync.Pool来管理对象池