1. 程式人生 > >java中 stack與和heap的區別

java中 stack與和heap的區別

java的記憶體分為棧(stack)和堆(heap);

1、棧(stack)

 (1)定義

        每個應用執行時都有自己的一段記憶體空間,用於存放臨時變數、引數傳遞、函式呼叫時的PC值以及物件的引用,這叫stack。

  (2)優缺點

    優點:存取速度比堆快,僅次於CPU中的暫存器。另外,

    缺點:存在棧中的資料的大小與生存期必須是確定的,所以缺乏靈活性。

  2、堆(heap)

  (1)定義

       堆是JVM的記憶體資料區。Heap的管理很複雜,每次分配不定長的記憶體空間專門用來儲存物件的例項(實際上是儲存物件例項的屬性值,屬性的型別和物件本身的型別標誌等),並不儲存物件的方法(方法是指令,儲存在棧中)。

   (2)優缺點

        優點:堆是一個執行時的資料區,它的優勢是可以動態地分配記憶體大小,生存期也不必事先告訴編譯器,因為它是在執行時動態分配記憶體的,java的垃圾收集器會自動收走這些不再使用的資料。

       缺點:由於在執行時動態分配記憶體,存取速度比較慢。