go - 在Go语言编写的游戏中查找内存泄漏的正确方法

标签 go memory memory-leaks

我正在用Go编写游戏。有人告诉我我的代码正在泄漏内存。找出泄漏原因的正确方法是什么?

我知道 pprof 存在,但据我所知,当您的应用程序使用http程序包并且我的应用程序是一个简单的游戏并且不使用任何网络连接时,就可以使用它。

最佳答案

当然,您可以使用runtime/pprof package创建没有HTTP服务器的配置文件。 Dave Cheney还提供了github.com/pkg/profile,它是运行时/pprof的包装器,具有更简单的API。例如,您可以使用信号处理程序来启用和禁用分析。

话虽如此,仅凭pprof,什么都不会阻止您启动HTTP服务器。我发现这更加方便,因为这样您就可以轻松按需创建任何配置文件。

// +build debug

package main

import (
    "log"
    "net/http"
    _ "net/http/pprof/"
)

func init() {
    log.Println("Launching pprof server")
    go func() { log.Fatal(http.ListenAndServe("localhost:3030", nil)) }()
}

这使用了构建标记,因此您可以在开发中启用服务器,但将其从生产构建中排除。用-tags debug编译以启用服务器。有关详细信息,请参见Build Constraints

关于go - 在Go语言编写的游戏中查找内存泄漏的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58228621/

相关文章:

ios - 平滑用户体验的游戏 Assets 加载策略

maven - 配置 GWT 编译器以使用更少的内存?

c++ - 具有高多线程的 TBB 4.2 内存泄漏

c++ - 堆栈分配的数组是否可能发生内存泄漏?

c++ - 什么导致内存保留

go - 查找 Go 程序的测试依赖项

mongodb - 如何使用mongodb/mongo-go-driver进行高效分页

mysql - Web 开发 - SQL 创建最近的页面

静态资源成员变量上的Android内存泄漏?

dictionary - 映射重复键值对(如果不存在)