逃逸分析

"逃逸分析"

Posted by tablesheep on

What?

对于对象(指针)使用范围的分析,大白话就是分析对象是否跨线程、跨方法使用。

方法逃逸:是否作为方法返回值、是否作为方法参数进行传递

线程逃逸:这个变量是否被别的线程访问了

逃逸分析作用

栈上分配:对于不会逃逸的对象,如果内存允许的情况下,直接使用栈上的空间,对象会随方法结束而被回收,减轻GC压力

同步消除:对于加锁的方法,如果运行时只有一个线程在访问,此时经过逃逸分析的机器码会把同步锁消除

标量替换:在Java中基本类型不能进一步分解,被称为标量,而可以被分解的对象被称为聚合量,在运行时如果此对象不会逃逸,那么此对象可能不会创建,而改为创建若干个成员变量替换