JVM的基本結構和JVM的記憶體結構
JVM的基本結構和JVM的記憶體結構
這裡概要介紹一下JVM在啟動後,作為作業系統的一個程式的基本結構,以及從作業系統角度看,JVM如何管理它從作業系統裡申請來的記憶體的,也就是JVM的記憶體結構或者叫JVM記憶體模型。
1、JVM的基本結構
================
JVM啟動後,對作業系統來說,JVM是一個的程式,這個程式的基本結構如上圖所示。它包括:類載入器子系統、執行時資料區、執行引擎和本地方法介面。
執行時資料區是JVM從作業系統申請來的堆空間和作業系統給JVM分配的棧空間的總稱。JVM為了執行Java程式,又進一步對執行時資料區進行了劃分,劃分為Java方法區、Java堆、Java棧、PC暫存器、本地方法棧等,這裡JVM從作業系統申請來的堆空間被劃分為方法區和Java堆,作業系統給JVM分配的棧空間構成Java棧。
2、從作業系統角度看JVM的記憶體結構
==============================
從Linux作業系統角度看,JVM是一個普通的應用程式程式,那麼JVM具有一般作業系統程式的特點,一般的程式的記憶體結構和JVM程式的記憶體結構是類似的,它們的記憶體結構類比參見下圖。
Linux把一個程式在記憶體中所佔的空間分為:方法區、資料區、堆區、棧區,對應地,JVM在記憶體中也有JVM方法區、JVM資料區、堆區和棧區。
程式碼區 中存放應用程式的機器程式碼,執行過程中程式碼不能被修改,具有隻讀和固定大小的特點。
資料區 中存放了應用程式中的全域性資料,靜態資料和一些常量字串等,其大小也是固定的。
堆 是執行時程式動態申請的空間,屬於程式執行時直接申請、釋放的記憶體資源。
棧區 用來存放函式的傳入引數、臨時變數,以及返回地址等資料。未使用區是分配新記憶體空間的預備區域。
由圖中可以知道,JVM堆被JVM進一步分為:執行時資料區中Java的方法區和Java堆(圖中顯示的是:永久、新生、老年,這是分代垃圾回收時的術語,實際上永久代和Java方法區對應,新生代和老年代和Java堆對應),也就說Java方法區和Java堆其實都是JVM堆的一部分。JVM的棧區構成了Java的執行緒棧。
Java方法區,在分代垃圾回收時也被稱為永久區,包括了已被虛擬機器載入的類資訊、常量池、靜態變數、即時編譯器編譯後的程式碼等資料,它實際上構成了Java程式的方法區和資料區。垃圾回收器也會對這部分記憶體進行回收,比如常量池的清理和類的解除安裝。
(這裡要注意區分JVM堆和Java堆,JVM方法區和Java方法區)
Java堆包括新生代和老年代,新生代包括Edge區兩個Survivor區(from Survivor 和 To Survivor)。
JVM的垃圾回收器主要工作是回收Java堆中的垃圾記憶體,具體來說就是JVM堆中的新生代和老年代所佔的記憶體。垃圾回收的內容主要關注這兩塊區域。執行Java程式之前,可以通過Xms(Java堆初始大小)和Xmx(Java堆最大值)來調整堆記憶體。
關於JVM的垃圾回收器的工作過程,和它回收垃圾記憶體時所遵循的策略也即垃圾回收演算法,可以單獨寫一篇文章總結,這裡不再寫。
3、JVM的類載入子系統
===================
JVM的類載入子系統主要用來載入和解除安裝Java類,其工作過程對應於一個類在記憶體中的生命週期,一般可以分為:載入、連線(驗證、準備、解析)、初始化、使用類和解除安裝類。
這個子系統的每一個階段的工作內容可以單獨總結為一篇文章,比如類的載入和類載入器,目前不在這裡多寫。
4、執行引擎
=============
執行引擎是JVM執行Java位元組碼的核心,執行方式主要分為:解釋執行、編譯執行、自適應優化執行、硬體晶片執行等方式。關於執行引擎也可以單獨總結。
參考文獻
1、《深入理解Java虛擬機器》,周志明。
2、Linux與JVM的記憶體關係分析,http://tech.meituan.com/linux-jvm-memory.html
3、http://blog.hesey.net/2011/04/introduction-to-java-virtual-machine.html
相關文章
- JVM(七):JVM記憶體結構JVM記憶體
- JVM記憶體結構JVM記憶體
- jvm系列(二):JVM記憶體結構JVM記憶體
- 深入理解 JVM 之 JVM 記憶體結構JVM記憶體
- 理解JVM(一):記憶體結構JVM記憶體
- JVM記憶體結構劃分JVM記憶體
- JVM之記憶體結構詳解JVM記憶體
- JVM學習(一)——記憶體結構JVM記憶體
- JVM及其記憶體結構劃分JVM記憶體
- JVM元空間Metaspace的記憶體結構JVM記憶體
- JVM記憶體結構、Java記憶體模型和Java物件模型JVM記憶體Java模型物件
- JVM結構-記憶體結構(執行時資料區)JVM記憶體
- 淺析JVM記憶體結構和6大區域JVM記憶體
- 淺談JVM記憶體結構 和 Java記憶體模型 和 Java物件模型JVM記憶體Java模型物件
- 【JVM之記憶體與垃圾回收篇】JVM與Java體系結構JVM記憶體Java
- JVM系列之Java記憶體結構詳解JVMJava記憶體
- 第一章 JVM記憶體結構JVM記憶體
- JVM讀書筆記之java記憶體結構JVM筆記Java記憶體
- 【JVM】堆體系結構及其記憶體調優JVM記憶體
- JVM的結構JVM
- 【JVM體系結構】JVM
- JVM - 整體結構JVM
- 深入理解JVM的記憶體結構及GC機制JVM記憶體GC
- JVM虛擬機器記憶體結構簡析JVM虛擬機記憶體
- 【JVM】JVM 概述、記憶體結構、溢位、調優(基礎結構+StringTable+Unsafe+ByteBuffer)JVM記憶體
- 深入探究JVM之記憶體結構及字串常量池JVM記憶體字串
- 一點一滴探究 JVM 之記憶體結構JVM記憶體
- 面試官問我JVM記憶體結構,我真的是面試JVM記憶體
- 1、JVM體系結構JVM
- 深入理解JVM虛擬機器1:JVM記憶體的結構與消失的永久代JVM虛擬機記憶體
- JVM記憶體模型總結JVM記憶體模型
- JVM 內部原理(四)— 基本概念之 JVM 結構JVM
- JVM基本結構、類載入過程以及執行時記憶體溢位分析JVM記憶體溢位
- JVM記憶體管理——總結篇JVM記憶體
- Oracle例項的程式結構和記憶體結構Oracle記憶體
- Oracle體系結構:記憶體結構和程式結構(轉)Oracle記憶體
- JVM結構的簡單梳理JVM
- ORACLE例項的程式結構和記憶體結構(轉)Oracle記憶體