JVM運行期數據域

Java是在JVM上運行的,那麼JVM運時是什麼樣子?

對於JVM運行時的數據區的理解用一個圖來顯示很形象,下面的圖顯示JVM運行時的數據區。

每個線程的數據區

從圖中可以看出,每個線程有programcounter register(程序計數器)JVM Stack(JVM),NativeMethod Stack(本地方法棧)。 這三個區域都是基於每一個線程的,當一個線程創建的時候生成。

程序計數器: 每一條JVM線程都有自己的PC寄存器,用來控制線程的執行。
 
JVM Stack(JVM
): Stack裏存放的是Frame()(如下圖所示)。 

Native Method Stack(本地方法棧): 用來支持native methods (Java語言method)。 

所有的線程共享數據區

所有的線程共享數據區有HeapMethod Area.

Heap()是與我們平時編程最直接打交道的區域。它存放所有的對象和數組。在JVM啓動時劃分生成。常說的Garbage Collector垃圾回收器就是對這個區域工作的。 

Method Area(方法區)存儲類的結構信息,包括 run-time constant pool, fieldand method data, methodsand constructors代碼。 

Runtime Constant Pool(運行時常量池)存放編譯時可知的數值字面量和運行期解析後才能獲得的methodfield的引用。

Stack中的包含一些Frame,這些Framemethod調動的時候生成。每一個Frame包括:local variable array, OperandStack, Reference to Constant Pool.

Reference:JVMSpecification – Run-Time Data Areas

Related posts:

1.   JVM Run-Time Data Areas

2.   What can we learn from JavaHelloWorld?

3.   What does a Java array look like inmemory?

4.   Get variable name by usingFieldDeclaration

 

發佈了87 篇原創文章 · 獲贊 224 · 訪問量 96萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章