Jvm技術總結

Java程序運行機制和虛擬機內存介紹

先編譯,再解釋。Java源文件使用javac編譯成.class字節碼文件,再解釋成平臺機器碼。java

Jvm自動內存管理

Jvm內存區域介紹

棧內存存儲的是局部變量,堆內存存儲的是實體,棧內存更新快,存放的變量生命週期結束以後釋放,堆內存存放的實體會被垃圾回收機制不定時回收。
圖片描述spa

把管理的內存劃分紅不一樣的數據區域,方法區、堆 <--->執行引擎 ---->(本地庫接口)
虛擬機棧、本地方法棧、程序計數棧<--->本地庫接口 ---->本地方法庫線程

  • 程序計數器:較小,當前字節碼行號指示器,經過改變值選取下一條指令。各線程之間的計數器互不影響。
  • 虛擬機棧:線程私有,生命週期與線程相同,每一個方法執行時建立一個棧幀(Stack Frame),存儲局部變量表等信息,局部變量表內存空間分配在編譯期間完成
  • 本地方法棧:與虛擬機棧相似,區別爲本地方法棧爲Native方法服務
  • Java堆:一般來講是內存空間最大的一起,被全部線程共享,惟一目的就是存放對象實例。從內存回收角度,又被成爲GC(garbage collection)堆,還可細分爲新生代,老年代
  • 方法區:與Java堆同樣,線程共享,用於存儲已被虛擬機加載的類信息、 常量、 靜態變量、 即時編譯器編譯後的代碼等數據。這區域的內存回收目標主要是針對常量池的回收和對類型的卸載
相關文章
相關標籤/搜索