堆:
- 存放對象實例,通過new關鍵字等創建的對象實例,存放在堆中;
- 堆是線程共享的;
- java的垃圾回收機制主要作用於java堆;
- java堆可以處於物理上不連續的內存空間,只要邏輯上連續即可;
- 堆只會出現一種類型的異常錯誤:OutOfMemoryError(OOM)無法申請到足夠的內存
方法區:
- 存放類的相關信息、常量、靜態變量等;
- 注意:方法區中包含運行時常量池(Runtime Constant Pool)
- 方法區線程共享;
- 一種異常類型:OutOfMemoryError(OOM)無法申請到足夠的內存
虛擬機棧
- 存放大致三類信息:
- 基本數據類型(boolean、byte、char、short、int、float、long、double)
- 對象引用類型:reference類型
- returnAddress類型:指向一條字節碼指令的地址
- 虛擬機棧線程私有;
- 面向棧有兩類異常:
- StackOverflowError:線程請求的棧深度大於虛擬機允許的最大深度
- OutOfMemoryError:無法申請到足夠的內存
本地方法棧
和虛擬機棧的作用類似,只不過虛擬機棧爲虛擬機執行java方法服務,本地方法棧爲執行Native方法服務;出現的異常也和虛擬機棧一樣,有兩種。
程序計數器PC
- 相當於當前線程所執行的字節碼的行號指示器;
- java虛擬機中多線程是通過線程切換並分配處理器執行時間來實現的,即在一個時刻,一個內核都只執行一條線程的中指令,故每條線程都需要一個PC,即PC是線程私有的;