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. 直接指針訪問
發佈了64 篇原創文章 · 獲贊 4 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章