天天看點

JVM記憶體結構---程式計數器,Java棧,堆,方法去,本地方法棧

JVM記憶體結構---程式計數器,Java棧,堆,方法去,本地方法棧

       程式計數器也叫PC寄存器,用于儲存目前正常執行的程式的記憶體位址。 當A線程被中斷時, 程式計數器會記錄A線程被中斷的記憶體位址。這樣當A現場恢複執行時,就能從之前中斷的指令位址,繼續執行。

       Java棧(JAVA虛拟機棧),它是和線程關聯在一起的。 每當建立一個線程,JVM就會為這個線程建立一個對應的Java棧。 一個Java棧會包含有多個棧幀(Frames),這些棧幀是與java方法關聯的,每運作一個java方法,就建立一個棧幀。 棧幀中會含有一些内部變量,操作棧和方法傳回值等資訊。

      注意:由于Java棧是與Java線程對應起來的,是以Java棧中的資料線程獨立的,是以我們不用關心同步的問題。 這就是為什麼說,局部變量不存線上程不安全的問題的原因。

      堆,用于存儲Java對象,存儲在堆中的對象,會複制所有非靜态屬性。堆是被所有Java線程所共享的,存在同步問題。

      方法區,用于存儲類結構資訊。 常量池,域,方法資料,方法體,構造函數,包括類中的專用方法,執行個體初始化,接口初始化都存儲在這個區域。 方法區是屬于Java堆中的永久區。

      本地方法棧,是為JVM運作Native方法準備的空間。

參考書籍: 《深入分析Java Web技術内幕》

繼續閱讀