Java虚拟机逃逸分析

为什么并不是所有的对象实例及数组在堆中分配内存?

原因在于:Java虚拟机引入了逃逸分析,会判断在方法中的对象是否会被外部方法使用。如果经过逃逸分析发现,方法中的对象不会被外部方法使用,那么这个对象就可能在栈中分配内存了。

public static StringBuffer craeteStringBuffer(String s1, String s2) {
   StringBuffer sb = new StringBuffer();
   sb.append(s1);
   sb.append(s2);
   return sb;
    // 该StringBuffer对象sb就返回出去了,可能会被其他方法所使用

}

public static String createStringBuffer(String s1, String s2) {
    StringBuffer sb = new StringBuffer();
    sb.append(s1);
    sb.append(s2);
    return sb.toString();
    //这个StringBuffer对象sb就没有被返回,因此不会被其他方法使用
    //返回的是String 对象
}

参考文章:深入理解Java中的逃逸分析_hollischuang 深入分析java的编译原理-CSDN博客

你可能感兴趣的:(java,开发语言)