JVM-JVM記憶體結構
阿新 • • 發佈:2018-12-05
一、概念
Java虛擬機器——JVM,,JVM我們可以想象為一個DOS程式,java之所以能做到“一次編譯,處處執行”,就是因為它的存在。java程式從原始碼到執行三個階段:編碼--編譯--執行,其中jvm在其中的角色就是編譯階段,將.class檔案解釋為機器碼,也就是說,只要有了jvm,那麼不管是在哪個平臺(作業系統)中都能執行java程式碼,這也就是體現了java的跨平臺特性,當然,jvm不僅可以執行java,本質上只要符合它的規範的語言都是可以的,比如說Scala。
(jdk,jre,jvm之間的關係圖)
二、記憶體結構
1、方法區
它用於儲存虛擬機器載入的類資訊、常量、靜態變數、是各個執行緒共享的記憶體區域
2、棧
java中的方法都存在棧中,因為符合後進先出的規則,棧描述的是java 方法執行的記憶體模型,每個方法被執行的時候 都會建立一個“棧幀”用於儲存區域性變量表(包括引數)、操作棧、方法出口等資訊。每個方法被呼叫到執行完的過程,就對應著一個棧幀在虛擬機器棧中從入棧到出棧的過程。宣告週期與執行緒相同,是執行緒私有的。
3、堆
各個執行緒共享的記憶體區域,其中最大的記憶體區域為GC堆,是用來回收不再使用的物件的一種實現,GC堆分為新生和年老,新生代主要儲存新建立的物件和尚未進入老年代的物件。老年代儲存經過多次新生代GC(Minor GC)任然存活的物件。