【深入理解Java虚拟机 第十一章】后端编译与优化之-逃逸分析

逃逸分析是为其他优化措施提供依据的分析技术

 

一个对象被定义后,做执行范围内,

如果被作为参数传递给其他方法,这种叫做方法逃逸;

如果运行被其他线程访问,这种称为线程逃逸。

 

对象的逃逸程度:不逃逸->方法逃逸->线程逃逸。

 

针对对象的逃逸程度的优化手段

1. 标量替换

对象是一个聚合量,由基本数据类型及reference类型等标量(无法继续分解的最小数据)组成。 如果一个对象不逃逸,就可以将对象拆解成基本数据类型及reference类型等标量,程序执行时可能不创建该对象,而是创建可以替代它的若干标量,分配和读写都会比较快。这种优化手段对对象逃逸程度要求很高,不允许对象逃逸出方法范围。

2. 栈上分配

我们知道对象几乎是在Java堆上分配,不再使用后被Java GC回收,回收动作无论是复制、标记清理还是标志整理都需要消耗处理器资源。如果确定一个对象不逃逸或者只逃逸出方法而不逃逸出线程,那么这个对象可以随着栈帧的创建分配在栈上,随着栈帧的出栈而销毁,这样垃圾收集子系统的压力会小很多。

3. 同步消除(锁消除)

如果确定一个对象不逃逸或者只逃逸出方法而不逃逸出线程,那么这个对象的读写肯定不会存在竞争,对这个变量的同步措施可以被消除。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值