[英]Java heap and stack memory allocation
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");
}
}
per
是一個局部變量,它將被存儲在堆還是堆棧中?
對象始終存儲在堆中 。 但是,對per
的引用將存儲在局部變量數組中 ,該數組存儲在為main(String[])
創建的幀中,該幀存儲在堆棧中 。
有關更多信息,請參閱: Java虛擬機的結構 。
編輯:我已經了解到JVM實際上能夠通過執行轉義分析來在堆棧上分配對象。 更好的是,可以應用一種稱為標量替換的技術,其中省略了對象分配,並且對象的字段被視為局部變量。 變量可以在機器寄存器上分配。
自Java 6u14以來,HotSpot VM已經實現了堆棧分配的逃逸分析。 它自Java 6u23起默認啟用。 對於要在堆棧上分配的對象,它不能轉義執行的線程,方法體或作為參數傳遞給另一個方法。
在堆上。 每次使用new
創建對象時,都會在堆上分配它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.