昨天遇到的面试题

面试题:程序代码没问题(不是变量, 资源未释放等问题), 内存占用变得很高, 正常情况下它不应该这么高的, 请问这是什么问题, 如何解决?

我问面试官的时候, 他跟我说:资源释放的时候, 那一部分内存空间还没还给系统, 导致系统内存升高, 可以用XXX工具查看(听得不是很懂, 就只记住这句, 哪位大佬解释下)

已邀请:

sunanxiang - Gopher,IT 男,嵩鼠,游戏狂

赞同来自: DennisMao

他说的应该是内存重用的问题,释放的时候,只是把变量占用的内存给释放了,但是释放后的内存没有还给系统,还是在go程序中,如果你下次需要内存的时候,优先使用上次预留下来的内存。应该是这样

pathbox - https://pathbox.github.io/

赞同来自:

代码逻辑上是把资源释放了,但实际底层还没有。 还要等下一次GC才有可能将资源回收了,比如在项目中用map存储大量数据

除了内存泄漏的情况,现在服务还没遇到过大量耗内存的情况,新版go的GC还是比较给力的

alphayan

赞同来自:

怎么解决?手动gc?

hapiman

赞同来自:

面试的什么岗位呢

xuanjiazhen

赞同来自:

说的是不是pprof工具

heramerom

赞同来自:

是不是对象太多了,来不及释放。我觉得他是想问 sync.Pool 这个知识点吧。

mnhkahn - Bryce Li

赞同来自:

内存释放是通过madvise释放的,建议操作系统回收,操作系统在系统内存不足时会释放。 可以手动释放https://golang.org/pkg/runtime/debug/#FreeOSMemory 。 通过 GODEBUG=gctrace=1 查看

很好奇你是去哪个公司面试的?

要回复问题请先登录注册