文章目錄
- 部落格概述
- 虛拟機的原理
- java虛拟機的基本結構
- 類加載子系統
- 方法區
- java堆
- 直接記憶體
- java棧
- 本地方法棧
- 垃圾收集系統
- PC寄存器
- 執行引擎
部落格概述
在這一部分,會講解虛拟機的一些基本的概念,算是一個入門。針對jdk1.7。
虛拟機的原理
所謂虛拟機,就是一台虛拟的機器。它是一款軟體,用來執行一系列虛拟的計算機指令,大體上虛拟機可以分為系統虛拟機和程式虛拟機,大名鼎鼎的visual box,vmware就屬于系統虛拟機,他們完全是對實體計算機的仿真,提供了一個可運作完整作業系統的軟體平台。程式虛拟機典型代表就是java虛拟機,他專門為執行單個計算機程式而設計,在java虛拟機中執行的指令我們稱為java位元組碼指令。無論是系統虛拟機還是程式虛拟機,在上面運作的軟體都被限制于虛拟機提供的資源中(這就是為啥有後面的虛拟機調優)。java發展至今出現了很多虛拟機,最初sun使用的一款叫做classic的java虛拟機,到現在應用最廣泛的是hotspot虛拟機,除了sun以外,還有BEA的JRockit,目前JRockit和hotspot都被oracle收入旗下,大有整合的趨勢。我們接觸的就是程式虛拟機。
java虛拟機的基本結構
由9部分組成,想要高薪必須準确堆知道每個部分的作用。
- 類加載子系統
- 方法區
- java堆
- 直接記憶體
- java棧
- 本地方法棧
- 垃圾回收系統
- PC寄存器
- 執行引擎
類加載子系統
負責從檔案系統或者網絡中加載Class資訊,加載的資訊存放在一塊稱之為方法區的記憶體空間。
方法區
存放類資訊,常量資訊,常量池資訊,包括字元串字面量和數字常量。
java堆
在java虛拟機啟動的時候建立java堆,它是java程式最主要的記憶體工作區域,幾乎所有的對象執行個體都存放在java堆中,堆空間是所有線程共享的。
直接記憶體
java的nio庫允許java程式使用直接記憶體,進而提高性能。通常直接記憶體的速度會優于java堆。讀寫頻繁的場合會考慮使用。
java棧
每個虛拟機線程都有一個私有的棧,一個線程的java棧線上程被建立的時候被建立,java棧中儲存着局部變量,方法參數,同時java的方法調用(遞歸導緻棧溢出),傳回值等。
本地方法棧
它與java棧非常類似,最大的不同是本地方法棧用于本地方法的調用。java虛拟機允許java直接調用本地方法,通常用c編寫本地方法(聯系android的jni)。
垃圾收集系統
垃圾收集系統是java的核心,也是必不可少的,java有一套自己的垃圾回收機制,開發人員無需手工清理(對比c語言和c++)。