关于逃逸分析

首先回顾一下jvm内存分配策略:

java虚拟机所管理的内存包括:方法区、虚拟机栈、本地方法栈、推、程序计数器等

JVM运行时数据主要存放在堆和栈,此处栈指虚拟机栈。

栈中存放了一下基本类型,及对象的引用。堆中主要存放对象,既new关键字创建的对象或数组元素等等。

但是由于JIT编辑和逃逸分析的影响,对象存在堆中不一定是绝对的。

 

发生逃逸行为分为两种:

1.线程逃逸:如类变量或实例变量,可以被其他线程访问到

2.方法逃逸:当一个对象在方法中定义之后,作为参数传递到其他方法中

如果不存在逃逸行为,则可以对该对象进行如下优化:同步消除、标量替换、栈上分配。

 

同步消除:如果确定对象不会被其他线程访问到,其读写没有竞争,则可以取消其同步锁。

标量替换:如果确定对象不会被外部访问(线程活其他方法),那该对象可能被拆散,经过优化之后不直接生成该对象,而是在栈上创建若干个对象中的成员变量。

栈上分配:HotSpot虚拟机并没有真正意义实现栈上分配,实际上还是标量替换。

这样可以避免创建大量对象,减少GC压力,一定程度上也可能提高运行效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值