整理自 周志明《深入JVM》

1, 是JVM优化技术,它不是直接优化手段,而是为其它优化手段提供依据。

2,逃逸分析主要就是分析对象的动态作用域。

3,逃逸有两种:方法逃逸和线程逃逸。
        方法逃逸(对象逃出当前方法):
                当一个对象在方法里面被定义后,它可能被外部方法所引用,例如作为调用参数传递到其它方法中。

线程逃逸((对象逃出当前线程):
                这个对象甚至可能被其它线程访问到,例如赋值给类变量或可以在其它线程中访问的实例变量

4,如果不存在逃逸,则可以对这个变量进行优化
        1,栈上分配。
                在一般应用中,不会逃逸的局部对象占比很大,如果使用栈上分配,那大量对象会随着方法结束而自动销毁,垃圾回收系统压力就小很多。
        2,同步消除
                线程同步本身比较耗时,如果确定一个变量不会逃逸出线程,无法被其它线程访问到,那这个变量的读写就不会存在竞争,对这个变量的同步措施
可以清除。
        3,标量替换。
                1, 标量就是不可分割的量,java中基本数据类型,reference类型都是标量。相对的一个数据可以继续分解,它就是聚合量(aggregate)。
                2, 如果把一个对象拆散,将其成员变量恢复到基本类型来访问就叫做标量替换。
                3, 如果逃逸分析证明一个对象不会被外部访问,并且这个对象可以被拆散的话,那么程序真正执行的时候将可能不创建这个对象,而改为直接在>栈上创建若干个成员变量。

5,逃逸分析还不成熟。
        1,不能保证逃逸分析的性能收益必定高于它的消耗。
                判断一个对象是否逃逸耗时长,如果分析完发现没有几个不逃逸的对象,那时间就白白浪费了。
        2,基于逃逸分析的优化手段不成熟,如上面提到的栈上分配,由于hotspot目前的实现方式导致栈上分配实现起来复杂。

6,相关JVM参数
        -XX:+DoEscapeAnalysis 开启逃逸分析
        -XX:+PrintEscapeAnalysis 开启逃逸分析后,可通过此参数查看分析结果。
        -XX:+EliminateAllocations 开启标量替换
        -XX:+EliminateLocks 开启同步消除
        -XX:+PrintEliminateAllocations 开启标量替换后,查看标量替换情况。

最新文章

  1. Ajax基础(小猫)
  2. Java基础学习总结 -- 图形用户界面GUI
  3. ado.net五大对象
  4. SQL Server Profiler教程
  5. Jersey(1.19.1) - Building URIs
  6. Windows Phone 8 开发环境搭建
  7. "NetworkError: 500 Internal Server Error - http://develop.console.aliyun.sinopec.com/ots/ots_queryOtsList.action?state=0"
  8. oracle插入例子
  9. CF 476 div2 C
  10. windows10 docker镜像存储位置修改
  11. CodeForces 719A. Vitya in the Countryside
  12. 5款最好的免费在线网站CSS验证器
  13. linux 3
  14. windows下安装、卸载mysql服务
  15. Tomcat登陆mysql的密码设置
  16. 验证手机格式的js代码
  17. css3新增样式介绍
  18. 创建list方法总结
  19. Codeforces Round #225 (Div. 2) E. Propagating tree dfs序+-线段树
  20. scala中计算的的一个小问题,超出Int.maxValue时不会报错

热门文章

  1. 解决Windows Server 2012 R2 Datacenter云服务器无法运行opencv python程序的问题
  2. Truck History(卡车历史)
  3. 自己修改的vim配色选择器的颜色显示部分
  4. 非常适合新手的jq/zepto源码分析08---ajax的封装
  5. mybatis中jdbcType的作用和是否必须
  6. Spring注解配置定时任务<task:annotation-driven/>
  7. C++学习之继承中的访问控制
  8. 【bzoj1207】[HNOI2004]打鼹鼠
  9. Android中静态变量的生命周期
  10. android TabHost控件