Java内存对象的逃逸分析

来源:互联网 发布:安森奈斯 知乎 编辑:程序博客网 时间:2024/05/18 02:33

 

看ThreadLocal时,看到 http://www.javaeye.com/topic/179040?page=2#510062 因此,又转到 “Java内存对象的逃逸分析”

 

http://blog.sina.com.cn/s/blog_4b6047bc01000avq.html

 

 

下面是我看此文章时的笔记,有可能有立即错误的地方,请仔细斟酌,以防被我误导

 

逃逸分析(Escape Analysis)是分析 指针动态范围 的方法,这同 指针分析外形分析 相关联

 

原作者这么说:

当变量(或者对象)在方法中分配后,其指针被返回或者被全局引用(这样就会被其他过程或者线程所引用),这种现象称作指针(或者引用)的逃逸(Escape)。

 

 

其中b_method方法内部生成的V对象的引用被返回给a_method方法内的变量v,c_method方法内生成的V对象被赋给了全局变量global_v。这两种场景都发生了指针(引用)逃逸。

 

 

但是,我的理解是这样的:

只要这个引用有可能会被多个线程所引用,这就发生了逃逸。像下面的代码,没有返回引用,也没有赋值给 static 的变量,我的理解,这里依然发生了逃逸

 

原作者的例子中,b_method并没有逃逸,因为,最终,在a_method中,b_method返回的引用还是没有可能被多个线程所引用