栈上分配:
栈上分配就是说创建对象的时候不仅仅可以在堆中进行,可以在栈上进行,有什么好处呢,我们都知道,当java方法执行的时候,是通过创建栈针,然后进栈出栈,先入后出的顺序,对象进栈创建,出栈销毁。这样就很方便。
逃逸分析:分析对象作用域。如果判断这个对象作用域超出方法体,则发生逃逸。
public class StackAlloction{
public StackAlloction obj;
//方法返回 对象,发生逃逸
public StackAlloction getInstance(){
return obj==null?new StackAlloction():obj;
}
//成为成员属性,发生逃逸
public void setObj(){
thsi.obj = new StackAlloction();
}
//对象的作用于仅在当前方法中有效,没有发生逃逸
public void useStackAllocation(){
StackAlloction s = new StackAlloction();
}
//引用成员变量的值,发生逃逸
public void useStackAllocation2(){
StackAlloction s =getInstance();
}
}