java中 stack與和heap的區別

java的內存分爲棧(stack)和堆(heap);

1、棧(stack)

 (1)定義

        每個應用運行時都有自己的一段內存空間,用於存放臨時變量、參數傳遞、函數調用時的PC值以及對象的引用,這叫stack。

  (2)優缺點

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

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

  2、堆(heap)

  (1)定義

       堆是JVM的內存數據區。Heap的管理很複雜,每次分配不定長的內存空間專門用來保存對象的實例(實際上是保存對象實例的屬性值,屬性的類型和對象本身的類型標誌等),並不保存對象的方法(方法是指令,保存在棧中)。

   (2)優缺點

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

       缺點:由於在運行時動態分配內存,存取速度比較慢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章