gpt4 book ai didi

go - 内存未释放

转载 作者:行者123 更新时间:2023-12-01 20:23:52 25 4
gpt4 key购买 nike

这是一个用于解压缩字符串的简单程序,我只是运行一个循环以显示内存使用量增加并且使用的内存从未释放过。
即使8小时后内存也没有释放
解压缩字符串的软件包:https://github.com/Albinzr/lzGo-(简单的lz字符串算法)
我添加了一个gist链接,因为用于解压缩的字符串很大
源代码:
Code
enter image description here
Activity 监视器
enter image description here
我是一个全新的人,谁能告诉我如何解决内存问题?
更新 7月15日
当达到内存限制时,该应用程序仍会崩溃,因为它仅使用12mb-15mb,这应该不会发生!

最佳答案

这里有很多事情。
首先,使用Go版本1.14.2 your program对我来说很好。它似乎没有泄漏内存。
其次,即使我故意通过将循环大小增加到100并将结果保存到数组中而造成内存泄漏,我也只使用了大约100 MB的内存。
第三,您不应该使用 Activity 监视器或任何其他操作系统级别的工具来检查Go程序中的内存泄漏。操作系统内存管理是一个非常痛苦的主题,而OS工具旨在帮助您确定程序如何影响整个系统,而不是程序中正在发生的事情。
具体来说,macOS“Real Memory”(类似于RSS,常驻集大小)包括程序不再使用但OS尚未收回的内存。当垃圾收集器释放内存并告诉OS不再需要该内存时,OS不会立即将其取回。 (为什么这样工作超出了此答案的范围。)
此外,如果OS处于内存压力下,它不仅可以收回程序已释放的内存,还可以(暂时)收回程序仍在使用但尚未“最近”访问的内存,以便另一个程序紧急需要内存可以使用它。在这种情况下,即使进程实际上没有使用更少的内存,“Real Memory”也会减少。操作系统没有报告任何统计信息可以为您提供帮助。
您需要使用本地的Go设置(例如GODEBUG=gctrace=1)或工具(例如expvarexpvarmon)来查看垃圾收集器在做什么。
至于限制程序时内存不足的原因,请记住,默认情况下,Go会构建动态链接的可执行文件,仅读取所有共享库会占用大量内存。尝试使用CGO_ENABLED=0通过静态链接构建应用程序,看看是否有帮助。查看仅运行循环1次迭代时将使用多少内存。

关于go - 内存未释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62828841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com