更新時間:2020-10-29 17:35:43 來源:動力節點 瀏覽1443次
JVM是java虛擬機的簡稱,它實現了程序與操作系統的分離,從而實現了java的跨平臺性,所以我們有必要學習JVM運行機制與原理等相關知識。JVM內存結構是大家需要學習的內容,下面我們來介紹JVM內存結構是由哪些部分構成的,一起來學習吧。
先來對JVM虛擬機進行簡單的介紹:(1)java程序經過一次編譯之后,將java代碼編譯為字節碼也就是class文件,然后在不同的操作系統上依靠不同的java虛擬機進行解釋,最后再轉換為不同平臺的機器碼,最終得到執行;(2)Java虛擬機(JVM)處在核心的位置,是程序與底層操作系統、硬件無關的關鍵;(3)JVM的下方是移植接口,移植接口由兩部分組成:適配器和Java操作系統, 其中依賴于平臺的部分稱為適配器,JVM 通過移植接口在具體的平臺和操作系統上實現;(4)JVM 的上方是Java的基本類庫和擴展類庫以及它們的API, 利用Java API編寫的應用程序(application) 和小程序(Java applet) 可以在任何Java平臺上運行而無需考慮底層平臺。
JVM內存結構可以用下圖來表示:
下面是對JVM內存結構構成部分的介紹:
一、程序計數器。java線程私有的,類似于操作系統里的PC計數器,可以看做是當前線程所執行的字節碼的行號指示器。如果線程正在執行的是一個java方法,這個計數器記錄的正在執行的虛擬機字節碼指令的地址。如果正在執行的是native方法,這個計數器值則為空。undefined此內存區域是唯一一個在java虛擬規范中沒有規定任何OutOfMemoryError情況的區域
二、虛擬機棧(棧內存)。java線程私有,虛擬機棧描述的是java方法執行的內存模型。每個方法在執行的時候,都會創建一個棧幀用于存儲局部變量、操作數、動態鏈接、方法出口等信息。每個方法調用都意味著一個棧幀在虛擬機棧中入棧到出棧的過程。
三、本地方法棧,和java虛擬機棧的作用類似,區別是該區域為JVM提供使用Native方法的服務。
四、堆內存。所有線程共享的一塊區域,垃圾回收器管理的主要區域。目前主要垃圾回收算法都是分代收集算法,所以java堆中還可以細分為:新生代和老年代,再細致一點的還有eden區,from survivor、to survivor,默認情況下是8:1:1的比例。根據java虛擬機規范的規定,java堆可以處于物理上不連續的內存空間中,只要邏輯上是連續的即可,就像我們的磁盤一樣。
五、方法區。各個線程共享的一個區域,用于存儲虛擬機加載的類信息,常量、靜態變量,即時編譯器編譯后的代碼等數據。雖然虛擬機規范中把方法區描述成堆的一個邏輯部分,但是他卻有一個別名叫Non-heap 非堆,目的是為了與java堆區分開來。運行時常量池。是方法區的一部分,用于存放編譯器生成的各種字面量和符號引用。
JVM是java的虛擬機,在面試中,JVM面試題的出現幾率都很大,所以也算是java編程中的重點學習內容,學好JVM內存結構有助于我們掌握JVM原理和相關操作,所以大家務必要學會JVM內存結構的內容,如果還有哪里不清楚的地方,可以在本站的java教程中找到答案。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習