Java內存結構

java虛擬機內存結構圖

堆:

  • 存放對象實例,通過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是線程私有的;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章