逃逸分析
在计算机语言编译器语言优化管理中,分析指针动态范围的方法称之为逃逸分析。
通俗点讲,当一个对象的指针被多个方法或线程引用时,我们称这个指针发生了逃逸。
public class G {
public static B b;
public void globalVariablePointerEscape(){//给全局变量赋值,发生逃逸
b=new B();
}
public B methodPointerEscape(){//方法返回值,发生逃逸
return new B();
}
public void instancePassPointerEscape(){
methodPointerEscape().printClassName(this);//实例引用发生逃逸
}
}
class B{
public void printClassName(G g){
System.out.println(g.getClass().getName());
}
}
在这个例子中,一共举了3种常见的指针逃逸场景。分别是 全局变量赋值,方法返回值,实例引用传递。
逃逸分析优化JVM原理
我们知道java对象是在堆里分配的,在调用栈中,只保存了对象的指针。
当对象不再使用后,需要依靠GC来遍历引用树并回收内存,如果对象数量较多,将给GC带