Jvm內存結構

 

Java虛擬機的內存結構通常能夠從線程共有和線程私有兩部分起頭提及,而後再詳細說明各自的部分,相似樹狀結構的做答,好處就是思路清晰,面試官聽着也舒服。java

線程共有的包括Java堆和方法區,線程私有的包括虛擬機棧、本地方法棧和程序計數器。這些內容回答一遍後,就能夠開始詳細敘述每一個點的詳細部分。面試

Java堆是用於存放Java程序運行時所需的對象等數據,Java堆又分爲新生代和老年代。咱們日常所說的垃圾回收,主要回收的就是堆區。更細一點劃分新生代又可劃分爲Eden區和2個Survivor區(From Survivor和To Survivor)。函數

方法區中最爲重要的是類的類型信息、常量池、域信息、方法信息。總之,方法區保存的信息,大部分來自於 class 文件,是 Java 應用程序運行必不可少的重要數據。spa

程序計數器用於存放下一條運行的指令,這裏是惟一無內存溢出的區域。若是當前程序正在執行一個Java方法,則程序計數器記錄正在執行的Java字節碼地址,若是當前線程正在執行一個Native方法,則程序計數器爲空。線程

虛擬機棧和本地方法棧用於存放函數調用堆棧信息。虛擬機執行java程序的時候,每一個方法都會建立一個棧幀,棧幀存放在java虛擬機棧中,經過壓棧出棧的方式進行方法調用。對象

不少人分不清虛擬機棧和本地方法棧的區別,由於本地方法棧(Native Method Stacks)與虛擬機棧所發揮的做用是很是類似的,其區別不過是虛擬機棧爲虛擬機執行Java方法(也就是字節碼)服務,而本地方法棧則是爲虛擬機使用到的Native方法服務。內存

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息