侧边栏壁纸
博主头像
晓果冻博主等级

行动起来,活在当下

  • 累计撰写 135 篇文章
  • 累计创建 16 个标签
  • 累计收到 91 条评论

目 录CONTENT

文章目录

JVM-逃逸分析

Administrator
2022-03-31 / 0 评论 / 1 点赞 / 413 阅读 / 1025 字

JVM-逃逸分析

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

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

相关参数
  1. 开启逃逸分析:-XX:+DoEscapeAnalysis
  2. 开启标量替换:-XX:+EliminateAllocations
1
JVM

评论区