1. 程式人生 > >jvm內存分區及各區線程問題

jvm內存分區及各區線程問題

保存 垃圾 共享 恢復 logs 局部變量 alt 通過 基礎數據結構

一.java內存模型圖

技術分享

二.直觀分類圖

  技術分享

三.各區簡單描述

   1.堆(heap):主要存放對象的實例也包括數組,是垃圾管理的主要作用區,是線程共享的

2.棧(stack):①虛擬機棧:描述的是 Java 方法執行的內存模型,每個方法在執行的同時會創建一個 Stack Frame (方法運行時的基礎數據結構)用於存儲局部變量表、操

作數棧、動態連接、方法出口等信息;是線程隔離的

          ②本地方法棧:本地方法棧和虛擬機棧非常相似,只不過本地方法棧是為Java使用到的Native方法服務的

3.方法區(Method Area):被虛擬機加載的類信息、靜態(static)變量,常量(final),即時編譯器編譯後的代碼等數據。運行常量池是方法區的一部分,class文件除了有類

的版本、字段、接口、方法等描述信息之外,還有一項信息常量池保存編譯期生成的字面量和符號引用。 線程之間共享的

   4.程序計數器(PC):是一塊較小的內存空間,是當前線程所執行的字節碼的行號指示器。字節碼解釋器工作時就是通過改變這個計數器的值來選取 下一條需要執行的字節

碼指令,分支、循環、跳轉、異常處理、線程恢復等基礎功能都需要依賴這個計數器來完成。(是線程隔離的)

    綜合有:堆和方法區是線程共享的,棧和程序計數器是線程隔離的

jvm內存分區及各區線程問題