1. 程式人生 > >Java虛擬機器--記憶體區域劃分

Java虛擬機器--記憶體區域劃分

執行時資料區域


在執行時資料區內,白色部分的是執行緒私有的:虛擬機器棧、本地方法棧、程式計數器

  1. 程式計數器:執行緒私有,可以看做當前執行緒所執行的位元組碼的行號指示器。若執行緒正在執行一個Java方法,這個計數器記錄正在執行的虛擬機器位元組碼指令地址;若正在執行Native方法,則計數器為空。

  2. Java虛擬機器棧:執行緒私有, 生命週期與執行緒相同。通常所講的“堆”記憶體,“棧”記憶體的“棧”,與虛擬機器棧或是說與虛擬機器棧中區域性變量表是等價的。區域性變量表存放了各種基本型別以及引用型別,在編譯期就可以完全確定大小。

  3. 本地方法棧:執行緒私有,作用與虛擬機器棧相同,只不過執行的是本地方法。

  4. Java堆:執行緒共享,目的是存放物件例項。通過-Xmx和-Xms可以控制堆是固定大小還是可擴充套件的。

  5. 方法區:執行緒共享,儲存已被虛擬機器載入的類資訊、常量、靜態變數等。

  6. 執行時常量池:方法區的一部分。Class檔案中除了類的版本、欄位、方法、介面等描述資訊外,還有一項是常量池(Constant Pool Table),用來存放編譯期生成的各種字面量符號引用
    相關閱讀:Java常量池理解與總結

  7. 直接記憶體:NIO中,引入一種基於通道(Channel)與緩衝區(Buffer)的I/O方式,它可以使用Native函式直接分配堆外記憶體,並且使用Java堆中的DirectByteBuffer物件作為這塊記憶體的引用

    進行直接操作。

物件的訪問定位

  1. 控制代碼訪問
  2. 直接指標訪問