如何增加Google Go中的堆空间

时间:2013-01-28 09:57:52

标签: go

我正在运行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 个答案:

答案 0 :(得分:6)

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

  • 32位版本的Go已知堆内存问题,通常不用于生产。确保在64位平台上使用64位版本的Go。
  • Go tip,go的分支将成为Go 1.1 has upgraded the maximum heap space from 8 GB to 128 GB。我所说过的核心Go开发人员建议使用Go技巧进行内存密集型生产。
  • Go on Windows使用较少,因此测试较少,这可能是一个错误。 Go在Linux和OS X上的尝试和尝试都要多得多。
  • 正如彼得提到的那样,Robert Hundt的基准是有缺陷的 - 请阅读更多内容:Profiling Go Programs

答案 1 :(得分:4)

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

  • 如果您正在运行32位Go版本,请尝试使用64位版本并使用提示修订版。
  • 如果可能的话,使用* nix平台 - 它有更好的内存管理IMO。

答案 2 :(得分:1)

Robert Hundt的基准是有缺陷的。它不是Go的有效基准。请阅读Profiling Go Programs了解详情。

答案 3 :(得分:0)

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

无论如何,他建议尝试不同的编译器(基于gcc的编译器,或基于计划9的编译器),因为一个可能比另一个更好。然后尝试使用64位计算机。

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

但不,没有编译器开关可以使用内存设置。

问候,奥利弗