内存管理主要分为两部分:内存分配、垃圾回收
逃逸对象:对象的作用于仅在当前方法中有效,称为没有发生逃逸,反之就认为是逃逸对象
发生逃逸情景举例:
1.方法返回对象
public
static
StringBuffer craeteStringBuffer(String s1, String s2) {
StringBuffer sb =
new
StringBuffer();
sb.append(s1);
sb.append(s2);
return
sb;
}
2.对象为成员变量赋值
public class Student{
public Student a;
public void test(){
a=new Student();
}
}
3.引用成员变量的值
Java中的对象都是在堆上分配的,而垃圾回收机制会回收堆中不再使用的对象,但是筛选可回收对象,回收对象还有整理内存都需要消耗时间。如果能够通过逃逸分析确定某些对象不会逃出方法之外,那就可以让这个对象在栈上分配内存,这样该对象所占用的内存空间就可以随栈帧出栈而销毁,就减轻了垃圾回收的压力。
但是分析逃逸对象也需要时间,所以性能未必提升多少。
目前主流商用hotSpotVm 并没有做这项优化