java虛擬機-運行時內存

jvm內存分佈圖

  • 線程獨有內存:程序計數器,虛擬機棧,本地方法
  • 非線程獨有:方法區,堆
  1. 程序計數器:用於記錄當前線程的字節碼行數,是線程獨有,該內存區域是Java虛擬機唯一沒有規定任何OutOfMemoryError的區域。
  2. 虛擬機棧:用於存儲局部變量,是線程獨有,局部變量是在編譯的時候已經確認後,方法運行時候的棧是已經確認好的。虛擬機棧規定了2種異常情況,一種是線程請求棧的深度大於虛擬機棧所允許的深度,這時候將會拋出StackOverflowError異常,如果當Java虛擬機允許動態擴展虛擬機棧的時候,當擴展的時候沒辦法分配到內存的時候就會報OutOfMemoryError異常。
  3. 本地方法棧:與虛擬機棧類似,只是本地方法執行native方法。
  4. 堆:存儲所有線程的共享對象實例,可以動態擴展,當沒有內存進行擴展的時候,堆拋出OutOfMemoryError異常。
  5. 方法區:這個也是線程共享的內存區域,存儲被虛擬機加載的類信息、常量、靜態變量即時編譯的代碼數據等。方法區一般很少回收,經常被稱爲永久區,但也是可以被回收,主要針對常量與類型的卸載。在方法區也規定當方法區無法滿足內存分佈的時候,將會拋出OutOfMemoryError異常

  6. 虛擬機堆棧參數設置     

  7.   -Xss 每個棧的大小

      -Xms 初始化堆大小,-Xmx 最大堆大小

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章