前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JVM-逃逸分析

JVM-逃逸分析

作者头像
晓果冻
发布2022-06-17 15:21:07
2090
发布2022-06-17 15:21:07
举报
JVM-逃逸分析
一个对象的指针被多个方法或者线程引用时,即可称这个指针发生了逃逸。
发生逃逸的几种场景
  1. 全局变量赋值
  2. 方法返回值
  3. 实例引用
优化步骤
  1. 找到未逃逸的变量
  2. 将变量在栈上分配
  3. 随着线程的结束,栈空间被回收,局部变量对象也被回收。
    • 与直接在堆上分配的区别:在栈空间作为临时对象的存储介质,从而减少临时对象在堆上的分配数量。
    • 合理利用栈中对象的生命周期。
逃逸分析的其他俩个优化应用
  • 同步消除:如果一个对象始终只被一个线程访问,那么该对象的同步操作就可以转化成没有同步保护的操作(栈是线程私有的),能大大提高并发和性能。
  • 矢量替代:如果对象的内存存储结构不需要连续进行的话,就可以将对象的部分甚至全部都保存在CPU寄存器内,这样能大大加快访问速度。

不理解的地方:逃逸分析不能在静态编译时进行,必须在JIT里完成,可以在运行时通过动态代理改变一个类的行为,此时,逃逸分析是无法得知类已经变化了。

相关参数
  1. 开启逃逸分析:-XX:+DoEscapeAnalysis
  2. 开启标量替换:-XX:+EliminateAllocations
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • JVM-逃逸分析
    • 一个对象的指针被多个方法或者线程引用时,即可称这个指针发生了逃逸。
      • 发生逃逸的几种场景
        • 优化步骤
          • 逃逸分析的其他俩个优化应用
            • 相关参数
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档