程序計數器
程序計數器(Program Counter Register)是一塊較小的內存空間,它記錄了當前線程所執行的字節碼的行號。在JVM的概念模型裏,字節碼解釋器工作時就是通過改變它的值來選取下一條需要執行的字節碼指令,分支、循環、跳轉、異常處理、線程恢復等基礎功能都是依賴它來完成的。
虛擬機棧
與程序計數器一樣,Java虛擬機棧(Java Virtual Machine Stacks)也是線程私有的,每一個線程都有自己的虛擬機棧,它的生命週期與線程相同,當線程被創建時,虛擬機棧也同時被創建;當線程被銷燬時,虛擬機棧也同時被銷燬。
本地方法棧
本地方法棧(Native Method Stacks)與虛擬機棧所發揮的作用是非常相似的,其區別不過是虛擬機棧爲虛擬機執行Java方法(也就是字節碼)服務,而本地方法棧則是爲虛擬機使用到的Native方法服務。
堆
Java堆(Java Heap)是Java虛擬機所管理的內存中最大的一塊。它是被所有線程共享的一塊內存區域,在虛擬機啓動時創建。它就是用來存放對象實例的,幾乎所有的對象實例都在這裏分配內存。
方法區
方法區(Method Area)與Java堆一樣,是各個線程共享的內存區域,它用於存儲已被JVM加載的類信息、常量、靜態變量、即時編譯器編譯後的代碼等數據。
參考答案
程序計數器、虛擬機棧、本地方法棧、堆、方法區
文章持續更新,微信搜索「 萬貓學社 」第一時間閱讀。