Paw*_*wan 5 java memory memory-management
class Person{
private String name;
public Person(){
}
public Person(String name){
this.name=name;
}
public static void main(String[] arg)
{
Person per= new Person("Andy");
}
}
Run Code Online (Sandbox Code Playgroud)
per 是一个局部变量,它将被存储在堆或堆栈中?
som*_*guy 28
对象始终存储在堆中.然而,参考到per将被存储在在局部变量阵列,其被存储在所述帧用于创建main(String[]),它被保存在堆栈.
有关更多信息,请参阅:Java虚拟机的结构.
编辑:我已经了解到JVM实际上能够通过执行转义分析来在堆栈上分配对象.更好的是,可以应用一种称为标量替换的技术,其中省略了对象分配,并且对象的字段被视为局部变量.变量可以在机器寄存器上分配.
自Java 6u14以来,HotSpot VM已经实现了堆栈分配的逃逸分析.它自Java 6u23起默认启用.对于要在堆栈上分配的对象,它不能转义执行的线程,方法体或作为参数传递给另一个方法.