首頁  >  文章  >  Java  >  JVM學習之Java執行時間資料區域

JVM學習之Java執行時間資料區域

零下一度
零下一度原創
2017-06-01 10:32:381456瀏覽

1. 程式計數器

目前執行緒所執行的字節碼的行號指示器。

2. Java虛擬機器堆疊

執行緒私有,與執行緒具有相同生命週期。用於儲存局部變數表格、操作數堆疊、動態鍊錶、方法出口等資訊

局部變數表存放內容:

  • #基本資料型態(boolean、byte、char、short、int、float、long、double)

  • ##物件引用(區別於符號引用,符號引用存放在常數池)

#returnAddress類型(指向一條字節碼指令的位址)

64位元長度的long和double型態資料佔用2個局部變數空間(slot),其餘佔用1個slot。

兩種例外:StackOverflowError:執行緒請求的堆疊深度>虛擬機器允許的深度

OutOfMemoryError:動態擴充時無法申請到足夠記憶體

3. 本機方法堆疊(Native Method Stack)

與虛擬機器堆疊類似,差異是Native Method Stack服務Native方法,而虛擬機器棧服務於Java方法。

4. Java堆(Java Heap)

所有執行緒共享,存放

物件實例、

陣列

垃圾收集器管理的主要區域,也稱為「GC堆(Garbage Collected Heap)」

包含新生代(Eden空間、From Survivor空間、To Survivor空間)、老生代。

可分割出多個執行緒私有的分配緩衝區(Thread Local Allocation Buffer,TLAB)。

物理上可以不連續,邏輯上連續。

可擴充:-Xmx和-Xms控制。 -Xmx最大堆記憶體大小,-Xms初始堆記憶體大小。

當堆中沒有可用記憶體完成實例分配,也無法再擴展時-OutOfMemoryError5. 方法區(別名Non-Heap)#也是所有執行緒共享,用於儲存

已被虛擬機器載入的類別資訊、常數、靜態變數、即時編譯器編譯後的程式碼等資料

    也稱“永久代(Permanent Generation)”,但本質上並不等價。
  • 永久代有-XX:MaxPermSize的上限。

  • 6. 執行時間常數池(Runtime Constant Pool)
  • 屬於方法區的一部份。

  • 7. 直接記憶體(Direct Memory)
  • JDK1.4新加入的NIO(New Input/Output)類,引進了一個基於通道(Channel)與緩衝區(Buffer)的I/O方式,它可使用Native

    函數
  • 函式庫直接分配
  • 堆外記憶體

    。不受Java堆大小(-Xmx)限制,可能造成各個記憶體區域總和大於實體記憶體限製而造成動態擴充時出現OutOfMemoryError。

  • 小結:

1、2、3三種記憶體區域是各個執行緒私有的

4、5是所有執行緒共有的

6是5的一部份

###7不是虛擬機器運行時資料區的一部分,屬於虛擬機器的記憶體區域外的其他實體記憶體############【相關推薦】######1. ###java集合框架學習筆記#########2. ## #介紹兩種計算java運行時間的程式碼範例#########3. ###Java事務管理學習之詳解JDBC的範例程式碼######

以上是JVM學習之Java執行時間資料區域的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn