Java虛擬機深入學習之一: Java虛擬機的內存區域

     java在運行之後,就將內存控制權交給了java虛擬機。 java虛擬機在執行java程序的過程中會把它所管理的內存劃分爲若干不同的數據區域。 運行時的內存區分爲以下幾部分:

    1.  程序計數器區域

              程序計數器是一塊較小的內存空間,是爲當前線程所執行的字節碼的行號指示器。  由於多線程的存在,所以每個線程都需要有一個獨立的程序計數器。 各個線程之間的程序計數器互不影響,獨立存儲。 所以程序計數器的內存區域是線程私有的。

              如果線程正在執行的是一個java方法,這個計數器記錄的是正在執行的虛擬機字節碼指令的地址。 如果執行的是native方法,則這個計數器爲空。

   

     2. java虛擬機棧

              描述的是java方法執行的內存調用模型, java虛擬機棧也是線程私有,生命週期和線程相同。


     3.本地方法棧
              是虛擬機使用到Native方法服務的內存棧, 線程私有的。


     4. java堆

              也被稱爲GC堆,  是虛擬機所管理的最大一塊內存,被所有線程共享,在虛擬機啓動時創建,目的是存放對象實例。如果堆中的內存不足,則會拋出OutOfMemory的異常。 

              java堆屬於線程共享的。


      5.方法區

              用於存儲已經被虛擬機加載的信息:包括常量,靜態變量,編譯後的代碼等數據。 也屬於線程共享的。 運行時的常量池Runtime Constant Pool也是方法區的一部分。


     注:  此係列文章均參考學習 《深入理解Java虛擬機》- 周志明

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