1.大多數 JVM 将記憶體區域劃分為 Method Area(Non-Heap)(方法區) ,Heap(堆) , Program Counter Register(程式計數器) , VM Stack(虛拟機棧,也有翻譯成JAVA 方法棧的),Native Method Stack ( 本地方法棧 ),其中Method Area 和 Heap 是線程共享的 ,VM Stack,Native Method Stack 和Program Counter Register 是非線程共享的。為什麼分為 線程共享和非線程共享的呢?請繼續往下看。
首先我們熟悉一下一個一般性的 Java 程式的工作過程。一個 Java 源程式檔案,會被編譯為位元組碼檔案(以 class 為擴充名),每個java程式都需要運作在自己的JVM上,然後告知 JVM 程式的運作入口,再被 JVM 通過位元組碼解釋器加載運作。那麼程式開始運作後,都是如何涉及到各記憶體區域的呢?