java虛擬機內存模型是java程序運行的基礎。
我近端時間,在某資料上看了點關於java虛擬機的介紹,簡單記錄下來。
java虛擬機內存包括:
1、程序計數器:一塊很小的內存空間,java支持多線程,因此,每一個線程都必須用一個獨立的程序計數器,用於記錄下一條要運行的指令。如果當前線程正在執行一個java方法,則程序計數器記錄正在執行的java字節碼地址。如果當前線程正在執行一個native方法,則程序計數器爲空。
2、虛擬機棧:這一塊空間也是線程私有的內存空間,它java線程在同一時間創建,它保存局部變量、部分結果、並參與方法的調用和返回。
3、本地方法棧:與java虛擬機棧的功能很相似,java虛擬機棧用於管理java函數的調用,而本地方法棧用於管理本地方法的調用。本地方法並不是java實現的,而是使用C實現的。在SUN的 hot spot虛擬機中,不區分本地方法棧和虛擬機棧。
4、java堆:這部分內存空間是最重要的部分,幾乎多有的對象和數組都在堆中分配空間。這裏又細分爲:新生代和老年代兩個部分。具體的內容,後面這裏再補一篇博客,詳細寫。
5、方法區:這塊內存區域與堆內存區域類似,是被JVM中所有線程共享的。主要保存的信息是類的元數據。
總結就是以上五個部分。
java虛擬機內存模型圖: