美文网首页Golang合集
GO-1.9做了哪些性能优化?

GO-1.9做了哪些性能优化?

作者: Flippancy | 来源:发表于2017-08-28 15:46 被阅读177次

    1. 调用带内联框架的堆栈

    运行时的用户应避免直接检查所产生的PC切片,而应使用runtime.CallersFrames获取调用堆栈的完整视图,或运行时.Caller来获取有关单个调用者的信息。这是因为PC切片的单个元素不能解释调用堆栈的内联框架或其他细微差别。
    具体来说,直接迭代PC切片并使用诸如runtime.FuncForPC之类的功能的代码单独解析每个PC将错过内联框架。要获得堆栈的完整视图,这些代码应改为使用CallersFrames。同样,代码不应该假设Callers返回的长度是呼叫深度的任何指示。它应该计算CallersFrames返回的帧数。
    在特定深度查询单个呼叫者的代码应该使用Caller,而不是将长度为1的片段传递给Callers。
    runtime.CallersFrames从Go 1.7开始就可以使用,所以可以在升级到Go 1.9之前更新代码。

    说明:
    通过修改了内部部分这种代码结构能够做到节省空间和执行时间。简单点说就是将这两个函数
    func a(b int) int {return b * b}
    func c(b int) int {return a(b) + 5}
    转换成一个函数
    func c(b int) int {return b * b + 5}
    另外,runtime.CallersFrames自Go 1.7以来一直可用,因此可以在升级到Go 1.9之前更新代码。

    2. 优化垃圾收集器

    库函数用于触发世界垃圾收集现在触发并发垃圾收集。具体来说,runtime.GC,debug.SetGCPercent和debug.FreeOSMemory,现在触发并发垃圾回收,只阻止调用goroutine直到垃圾收集完成。
    如果由于新GOGC值而立即需要,debug.SetGCPercent函数仅触发垃圾回收。这使得可以即时调整GOGC。
    大型对象分配性能在使用大型(> 50GB)堆包含许多大型对象的应用程序中得到显着改善。

    相关文章

      网友评论

        本文标题:GO-1.9做了哪些性能优化?

        本文链接:https://www.haomeiwen.com/subject/vnrgdxtx.html