JAVA內存區域

Paste_Image.png

運行時數據區

要討論的就是:運行時數據區。一般,我們叫它java內存。

關于這個,普遍的圖示是這樣的:

Paste_Image.png

但是我覺得,應該畫成:

Paste_Image.png
  • 程序計數器:就是一個記錄當前程序運行到哪一行
    占用空間小 (每次別人畫那么大,很容易誤會)

  • 方法區和堆

#方法區
  存儲了
* 每個類的信息(包括類的名稱、方法信息、字段信息)
* 靜態變量
* 常量
* 編譯器編譯后的代碼等
#堆
Java中的堆是用來存儲對象本身的以及數組(當然,數組引用是存放在Java棧中的)。

堆是被所有線程共享的,在JVM中只有一個堆。

垃圾回收機制,就是搞這個的。
#個人觀點

堆和方法區,其實都是真正存放了信息的內存區域。
真正存放信息的意思是,存放了有內容的數據,而不是指針或是引用等等。

#差別是:
方法區是給執行引擎用的。

(額,也可能不是執行引擎,可能是虛擬機自己用,
總之,是整個java的本身運行機制需要用到的信息,存在方法區。)

而堆中的數據是給線程用的。
(也就是我們業務邏輯關注的那部分數據。)

  • 本地方法棧和java虛擬機棧
#java虛擬機棧

就是我們常說的棧。用于存儲,函數調用,而導致需要存儲的內容。

簡單舉個例子:
函數A(){
    函數B();
} 

從函數A 跳到函數B,
等函數B運行完成,需要回到函數B,
那么怎么回去,就是從棧頭pop信息出來。
這個信息包括:各種數據信息:esp,dsp,pc 等等一系列的信息。
都是由于函數調用導致的信息。具體要看看操作系統。

#本地方法棧

本地方法棧與Java棧的作用和原理非常相似。
區別只不過是Java棧是為執行Java方法服務的,而本地方法棧則是為執行本地方法(Native Method)服務的。
在JVM規范中,并沒有對本地方法棧的具體實現方法以及數據結構作強制規定,虛擬機可以自由實現它。
在HotSopt虛擬機中直接就把本地方法棧和Java棧合二為一。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容