2 回答

TA贡献1821条经验 获得超6个赞
这是一个您可能感兴趣的线程:为 GOGC=off 添加 runtime.Free()
有趣的部分:
Go GC 不再具有手动释放块的能力。此外,运行时。Free 是不安全的(人们可能会释放仍在使用中的指针或双重释放),然后 Go 努力摆脱的各种 C 内存问题将再次出现。另一个原因是运行时有时会在你背后分配,程序无法显式释放内存。
如果你真的想用 Go 手动管理内存,请根据 syscall.Mmap 或 cgo malloc/free 实现自己的内存分配器。
对于像 Go 这样的并发语言来说,长时间禁用 GC 通常是一个糟糕的解决方案。Go 的 GC 只会在未来变得更好。
TL;DR:是的,但不要这样做

TA贡献1827条经验 获得超8个赞
我有点晚了,但是这个问题在谷歌上排名很高,所以这里是 DGraph 数据库的创建者的一篇文章,它解释了 malloc/calloc 的替代方法,即 jemalloc,值得一看
https://dgraph.io/blog/post/manual-memory-management-golang-jemalloc/
使用这些技术,我们可以两全其美:我们可以在关键的、内存绑定的代码路径中进行手动内存分配。同时,我们可以在非关键代码路径中获得自动垃圾回收的好处。即使您不习惯使用 Cgo 或 jemalloc,您也可以将这些技术应用于更大的 Go 内存块,并产生类似的影响。
而且我还没有测试过,但是有一个叫jemalloc-go的github库
https://github.com/spinlock/jemalloc-go
- 2 回答
- 0 关注
- 1182 浏览
添加回答
举报