1. 程式人生 > >深入理解java虛擬機器學習筆記(一)

深入理解java虛擬機器學習筆記(一)

Java記憶體區域模型

Java虛擬機器在執行Java程式的過程中,會把它所管理的記憶體區域劃分為若干個不同的資料區域,這些區域一般被稱為執行時資料區(Runtime Data Area),也就是我們常說的JVM記憶體。
執行時資料區通常包括以下這幾個部分:

  • 程式計數器(Program Counter Register)
  • 虛擬機器棧(VM Stack)
  • 本地方法棧(Native Method Stack)
  • 堆(Heap)
  • 方法區(Method Area)
    java虛擬機器執行時資料區
    1. 程式計數器(Program Counter Register)
    程式計數器是一塊較小的記憶體空間,它可以看做是當前執行緒所執行的位元組碼的行號指示器。位元組碼直譯器在工作時,會通過改變這個計數器的值來取下一條語句指令。每條執行緒都需要一個獨立的程式計數器,各條執行緒之間計數器互不影響,獨立儲存,我們稱之為執行緒私有

    2.虛擬機器棧(VM Stack)
    虛擬機器棧描述的是Java方法執行的記憶體模型:每個方法在執行的同時都會建立一個棧幀用於儲存區域性變量表、運算元棧、動態連結、方法出口等資訊。每一個方法從呼叫直至執行完成的過程,就對應著一個棧幀在虛擬機器棧中從入棧到出棧的過程。與程式計數器一樣,虛擬機器棧也是執行緒私有的,它的生命週期與執行緒相同
    3.本地方法棧(Native Method Stack)
    本地方法棧的作用與虛擬機器棧非常的類似,它們的主要區別是:虛擬機器棧是執行Java方法的,而本地方法棧是用來執行native方法的。與虛擬機器棧一樣,本地方法棧也是執行緒私有的
    4.堆(Heap)
    Java堆是被所有執行緒所共享的一塊記憶體區域,在虛擬機器啟動時建立。此記憶體區域的唯一目的就是存放物件例項
    陣列,幾乎所有的物件例項都在這裡分配記憶體。Java堆是垃圾收集器管理的主要區域,因此很多時候也稱作為"GC"堆
    5.方法區(Method Area)
    方法區與Java堆一樣,是各個執行緒共享的記憶體區域,它用於儲存已被虛擬機器載入的類資訊、常量、靜態變數、即使編譯器編譯後的程式碼等資料
    執行時常量池(Runtime Constant Pool)是方法區的一部分,用於儲存編譯期生成的各種字面量、符號引用,這部分內容將在類載入後進入方法區的執行時常量池中存放