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

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)堆包含许多大型对象的应用程序中得到显着改善。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 34,910评论 18 399
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 179,443评论 25 708
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 2,112评论 0 9
  • 初三你说你喜欢我,想要和我好,我们就好上了,处了不到三天,Y: 你姐妹说你配不上人家,我:谁说的 她说Yy...
    Waiting775阅读 194评论 0 0
  • 平和李阅读 214评论 1 1

友情链接更多精彩内容