java記憶體區域——執行時資料區域
阿新 • • 發佈:2022-05-18
根據《java虛擬機器規範》,Java執行時管理的記憶體區域包括以下幾個執行時資料區域:
程式計數器:程式計數器是一塊較小的記憶體,它可以看作是當前執行緒執行的位元組碼行號指示器。位元組碼直譯器工作時就是通過計數器來選擇需要執行的下一條位元組碼執行指令。由於Java虛擬機器的的多執行緒是通過執行緒的輪流切換,分配處理器執行時間實現的。在任何一個時刻,一個處理器都只會執行一條執行緒,所以每個執行緒都需要擁有各自的程式計數器,相互之前互不影響,獨立儲存。這種記憶體區域稱之為“執行緒私有”的。此區域是唯一一個在《java虛擬機器規範》中沒有OutOfMemoryError情況的區域。
虛擬機器棧
本地方法棧:本地方法棧的作用與虛擬機器棧的作用是相似的。區別是本地方法棧為虛擬機器使用本地方法服務。它同虛擬機器棧一樣也會對應的出現StackOverflowError和OutofMemoryError異常。
方法區:此區域是執行緒所共享的區域。它用於儲存已被虛擬機器載入的常量,靜態變數,型別資訊,即時編譯器編譯後的程式碼快取等資料。根據《java虛擬機器規範》,當方法區無法滿足新的記憶體分配需求時,會丟擲OutOfMemoryError異常。
java堆:此區域是執行緒所共享的區域。對於java程式而言,這一區域是Java虛擬機器所管理的最大的一塊記憶體。此記憶體的唯一目的是存放物件例項。根據《Java虛擬機器規範》,此區域可以是物理上不連續的記憶體空間中,但是在邏輯上被視為連續的。當堆無法擴充套件時,會丟擲OutOfMemoryError異常。
參考:《深入理解Java虛擬機器》第三版——周志明