原標題爲:JVM Run-Time Data Areas數組
參考下圖:jvm
![](http://static.javashuo.com/static/loading.gif)
每一個線程單獨的數據區(線程間不共享)
每一個線程都有一片單獨的內存區域,這裏麪包含:程序計數器(program counter register),JVM棧和本地方法棧(Native Method Stack)。當一個新的線程被建立的時候,這片內存就已經被分配出來了。
程序計數器:爲了線程切換後能恢復到正確的執行位置,每條線程都須要有一個獨立的程序計數器,各線程之間的計數器互不影響,獨立存儲。
JVM棧:其結構以下圖所示:
本地方法棧:用來支持本地方法的調用,即非Java代碼。
全部線程共享的數據區
堆區和方法區被全部線程所共享。
堆區:這是咱們最經常使用的區域,用來存儲數組和對象,JVM啓動的時候這部份內存就存在了。垃圾收集器(GC)就在這個區域裏工做。
方法區:用來存儲運行時常量池( run-time constant pool )。
運行時常量池:是每個類或接口常量表現形式,包括若干種常量:包括從編譯期可知的值和解析運行才知道的值。
棧由幀組成,當一個方法被調用時,相應的幀就會被壓到棧中。幀中存放了本地變量、操做數棧和指向常量池的引用。