java的內存分爲棧(stack)和堆(heap);
1、棧(stack)
(1)定義
每個應用運行時都有自己的一段內存空間,用於存放臨時變量、參數傳遞、函數調用時的PC值以及對象的引用,這叫stack。
(2)優缺點
優點:存取速度比堆快,僅次於CPU中的寄存器。另外,
缺點:存在棧中的數據的大小與生存期必須是確定的,所以缺乏靈活性。
2、堆(heap)
(1)定義
堆是JVM的內存數據區。Heap的管理很複雜,每次分配不定長的內存空間專門用來保存對象的實例(實際上是保存對象實例的屬性值,屬性的類型和對象本身的類型標誌等),並不保存對象的方法(方法是指令,保存在棧中)。
(2)優缺點
優點:堆是一個運行時的數據區,它的優勢是可以動態地分配內存大小,生存期也不必事先告訴編譯器,因爲它是在運行時動態分配內存的,java的垃圾收集器會自動收走這些不再使用的數據。
缺點:由於在運行時動態分配內存,存取速度比較慢。