优化 – 如何有效地构建golang程序以实现最佳垃圾收集器运行?
最近通过强时间优化的GC运行,优化代码以在golang GC中获得更好的结果似乎更为重要.我最近被告知它在运行中完成了多少“取决于你的堆内存使用模式.”但是我并不确定从语言程序员的角度来看这意味着什么.或者这不是可以轻易控制的东西?
我已经阅读了Brian W. Kernighan最近出版的“The Go Programming Language”一书,但其中没有关于这个主题的内容.互联网上关于这个主题的所有信息都是几年前的,所以不要真正适用. 我目前做的一些事情包括: >确保指针/对象只存储/记住它们需要的位置 我也有点恼火的是,在一个或另一个之间转换时总是重新创建字符串和字节数组(由于字符串是不可变的).因此,当我从一个到另一个,并且它是一个安全的操作时,我只是使用unsafe重新指向另一个类型的指针. 所有这些实践都值得帮助GC更快更清晰地运行吗?还有什么我可以做的吗? 解决方法
如果这只是一个简单的事情和注意事项,我们可以简单地编写一个程序来优化内存使用.
第一步是编写正确,设计良好,可维护且易于阅读的代码. 接下来,使用Go的测试包,对关键功能进行基准测试.例如.一个真实的案例, BenchmarkOriginal 30000 44349 ns/op 52792 B/op 569 allocs/op 使用Go的个人资料工具.阅读源代码和可执行代码以查看发生了什么. 实现策略,例如单个底层数组和完整切片表达式,以减少GC内存分配和CPU时间.运行最终基准. BenchmarkOptimized 100000 13198 ns/op 32992 B/op 3 allocs/op 在这种情况下,三角形阵列的569个元素分配减少到3个分配,分配减少99%,CPU时间相应减少70%.垃圾收集器(GC)也要少得多. 当然,这使代码更难阅读(更复杂,更模糊??),因此难以维护. 不要过度优化.你真的没有更好的事吗?最好的优化通常是购买更大的计算机. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |