3

我正在运行 Rober Hundt 的基准测试中的 Go 代码,以比较 Go 与其他语言的性能。当我从该基准运行 Go 代码时(请参阅http://code.google.com/p/multi-language-bench/source/browse/trunk/src/#src%2Fhavlak%2Fgo)我内存不足例外:

................运行时:内存不足:无法分配 1048576 字节块(1270808576 正在使用中)抛出:内存不足

我的问题是如何增加 Go 的内存空间。是否有可以相应设置的编译器的一些启动参数或一些标志?Go 源代码的 Makefile 文件没有显示任何内容......

谢谢,奥利弗

4

4 回答 4

6

如果您分享您的操作系统版本,如果它是 32 位和 64 位以及您的go version结果,我们可能会为您提供更多帮助。

  • 32 位版本的 Go 存在已知的堆内存问题,一般不会在生产环境中使用。确保您在 64 位平台上使用 64 位版本的 Go。
  • Go 提示,将成为 Go 1.1 的 go 分支已将最大堆空间从 8 GB 升级到 128 GB。与我交谈过的核心 Go 开发人员建议将 Go tip 用于内存密集型生产用途。
  • Go on Windows 使用较少,因此测试较少,这可能是一个错误。Go 在 Linux 和 OS X 上的尝试和真实性要小得多。
  • 正如 peterSO 所提到的,Robert Hundt 的基准测试是有缺陷的——在这里阅读更多:Profiling Go Programs
于 2013-01-28T23:54:50.070 回答
4

由于缺乏更多细节,人们只能疯狂猜测。

  • 如果您运行的是 32 位 Go 版本,请尝试使用 64 位版本并使用最新版本。
  • 如果可能,请使用 *nix 平台 - 它具有 IMO 更好的内存管理。
于 2013-01-28T10:08:42.497 回答
1

罗伯特亨特的基准是有缺陷的。它不是 Go 的有效基准。阅读Profiling Go Programs了解详情。

于 2013-01-28T12:03:12.563 回答
0

对于那些可能感兴趣的人,我给先生发了一封邮件。hunt 自己询问是否有一些(未记录的)编译器开关可以以某种方式调整或参数化堆大小。这是因为我首先错误地认为这样的开关必须存在,但没有记录。在这里回复我的帖子的人似乎也不知道。我想我对 jvm 的工作方式“受到了太多启发”......

无论如何,他建议尝试不同的编译器(基于 gcc 的编译器或基于 plan-9 的编译器),因为其中一种可能比另一种更好。然后在 64 位机器上尝试,当然。

他还为我指出了一些关于 Go 的内存管理的好文章:http: //lwn.net/Articles/428100/

但是不,没有编译器开关可以处理内存设置。

问候,奥利弗

于 2013-02-01T15:11:47.777 回答