美文网首页
逃逸分析

逃逸分析

作者: 自由编程 | 来源:发表于2020-02-14 22:17 被阅读0次

From - 自由编程


所谓逃逸分析(Escape analysis),是指由编译器进行内存分配策略分析, 通过编译参数-gcflag=-m可以查看编译过程中的逃逸分析。
如:

go build -gcflags="-m"

一般的,函数申请一个对象可能存放在堆或栈中

如果分配在栈中,则函数执行结束可自动将内存回收;
如果分配在堆中,则函数执行结束可交给GC(垃圾回收)处理;

编译器跟据对象是否被函数外部引用来决定存放位置:

如果函数外部没有引用,则优先放到栈中;
如果函数外部存在引用,则必定放到堆中;

如下面一段代码escape.go

package main

type One struct {
    Name string
}

func OneRegister(name string) *One {
    s := new(One) //局部变量s逃逸到堆
    s.Name = name
    return s
}

func main() {
    OneRegister("Jim Green")
}

在执行编译命令后提示“escapes to heap”,表示该行内存分配发生了逃逸现象。

go build -gcflags="-m" escape.go 

# command-line-arguments
./escape.go:7:6: can inline OneRegister
./escape.go:13:6: can inline main
./escape.go:14:13: inlining call to OneRegister
./escape.go:7:18: leaking param: name
./escape.go:8:10: new(One) escapes to heap
./escape.go:14:13: main new(One) does not escape

相关文章

  • Java 逃逸分析

    > 什么是逃逸分析? - 关于 Java 逃逸分析的定义: - 逃逸分析(Escape Analysis)简单...

  • go 逃逸分析

    go 逃逸分析 什么是逃逸分析 逃逸分析决定一个变量是分配在堆上还是分配在栈上 原理 逃逸分析这种“骚操作”把变量...

  • (十三)golang 逃逸分析

    Golang逃逸分析 介绍逃逸分析的概念,go怎么开启逃逸分析的log。以下资料来自互联网,有错误之处,请一定告之...

  • 深入分析JVM逃逸分析对性能的影响

    逃逸分析(Escape Analysis) 逃逸分析的基本行为就是分析对象动态作用域:当一个对象在方法中被定义后,...

  • JVM内存逃逸

    逃逸分析(Escape Analysis)是目前Java虚拟机中比较前沿的优化技术。 逃逸分析的基本行为就是分析对...

  • jvm 优化篇-(4)-栈上分配与逃逸分析 -XX:+DoEsc

    逃逸分析(Escape Analysis) 逃逸分析的基本行为就是分析对象动态作用域:当一个对象在方法中被定义后,...

  • 逃逸分析

    逃逸分析 在编程语言的编译优化原理中,分析指针动态范围的方法称之为逃逸分析。通俗来讲,当一个对象的指针被多个方法或...

  • 逃逸分析

    做个笔记,参开其他资料学习一下,以下纯属个人见解,如有错误之处,欢迎讨论和纠正。 参考资料 JVM的逃逸分析深入分...

  • 逃逸分析

    逃逸分析(Escape Analysis)是目前Java虚拟机中比较前沿的优化技术,他与类型继承关系分析一样,并不...

  • 逃逸分析

    https://zh.wikipedia.org/wiki/%E9%80%83%E9%80%B8%E5%88%86...

网友评论

      本文标题:逃逸分析

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