
我已经阅读了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)也要少得多.
当然,这使代码更难阅读(更复杂,更模糊),因此难以维护.
不要过度优化.你真的没有更好的事吗?最好的优化通常是购买更大的计算机.
总结以上是内存溢出为你收集整理的优化 – 如何有效地构建golang程序以实现最佳垃圾收集器运行?全部内容,希望文章能够帮你解决优化 – 如何有效地构建golang程序以实现最佳垃圾收集器运行?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)