1. 程式人生 > >記憶體分析:棧、堆、方法區

記憶體分析:棧、堆、方法區

 Java虛擬機器的記憶體可以分為三個區域:棧stack、堆heap、方法區method area。

棧的特點如下:

  1. 棧描述的是方法執行的記憶體模型。每個方法被呼叫都會建立一個棧幀(儲存區域性變數、運算元、方法出口等)

  2. JVM為每個執行緒建立一個棧,用於存放該執行緒執行方法的資訊(實際引數區域性變數等)

  3. 棧屬於執行緒私有,不能實現執行緒間的共享!

  4. 棧的儲存特性是“先進後出,後進先出”

  5. 棧是由系統自動分配,速度快!棧是一個連續的記憶體空間!

堆的特點如下:

  1. 堆用於儲存建立好的物件和陣列(陣列也是物件)

  2. JVM只有一個堆,被所有執行緒共享

  3. 堆是一個不連續的記憶體空間,分配靈活,速度慢!

方法區(又叫靜態區)特點如下:

  1. JVM只有一個方法區,被所有執行緒共享!

  2. 方法區實際也是堆,只是用於儲存類、常量相關的資訊!

  3. 用來存放程式中永遠是不變或唯一的內容。(類資訊【Class物件】、靜態變數、字串常量等)

1.png

圖4-4 示例4-3記憶體分配圖

neicunfenxi.png