簡體   English   中英

Java堆和堆棧內存分配

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM