加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Golang.零垃圾传播或有效使用内存

发布时间:2020-12-16 19:23:24 所属栏目:大数据 来源:网络整理
导读:我不时会面对零垃圾或有效使用内存等概念.例如,在众所周知的软件包 httprouter的功能部分中,您可以看到以下内容: Zero Garbage: The matching and dispatching process generates zero bytes of garbage. In fact,the only heap allocations that are made,
我不时会面对零垃圾或有效使用内存等概念.例如,在众所周知的软件包 httprouter的功能部分中,您可以看到以下内容:

Zero Garbage: The matching and dispatching process generates zero bytes of garbage. In fact,the only heap allocations that are made,is by building the slice of the key-value pairs for path parameters. If the request path contains no parameters,not a single heap allocation is necessary.

与标准库的http.ServeMux相比,此包显示了非常好的基准测试结果:

BenchmarkHttpServeMux         5000     706222 ns/op          96 B/op        6 allocs/op
BenchmarkHttpRouter         100000      15010 ns/op           0 B/op        0 allocs/op

据我所知,第二个(从表中)没有堆内存分配和每次重复的零平均分配数.

问题:我想学习对内存管理的基本理解.当垃圾收集器分配/释放内存时.基准数字意味着什么(表格的最后两列)以及人们如何知道堆分配的时间?

我对内存管理非常陌生,所以很难理解“幕后”的内容.我读过的文章:

> https://golang.org/ref/mem
> https://golang.org/doc/effective_go.html
> http://gribblelab.org/CBootcamp/7_Memory_Stack_vs_Heap.html
> http://en.wikipedia.org/wiki/Garbage_collection_(computer_science)

垃圾收集器不分配内存:-),它只是解除分配. Go的垃圾收集器正在不断发展,详细信息请查看设计文档 https://docs.google.com/document/d/16Y4IsnNRCN43Mx0NZc5YXZLovrHvvLhK_h0KN8woTO4/preview?sle=true,并按照golang邮件列表中的讨论进行操作.

基准测试输出中的最后两列很简单:总共分配了多少字节,以及在基准代码的一次迭代中发生了多少分配. (此分配由您的代码完成,而不是由垃圾收集器完成).由于任何分配都是潜在的垃圾减少,这些数字可能是设计目标.

什么时候在堆上分配?每当Go编译器决定!编译器尝试在堆栈上进行分配,但有时它必须使用堆,尤其是当值从本地堆栈范围转义时.此转义分析目前正在进行返工,因此要分析堆或堆栈分配的值并不容易,尤其是当它从编译器版本更改为版本时.

在您的基准测试显示过多的GC开销之前,我不会过于沉迷于避免分配.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读