java虛擬機概述

所謂的java虛擬機,就是一台虛擬的機器。它是一款軟體,用來執行一系列虛擬計算機指令,大體上虛擬機可以分為系統虛擬機和程序虛擬機。visualBox、VMare就屬於系統虛擬機。他們完全是對物理計算機的模擬,提供一個可運行完整操作系統的軟體平台。而java虛擬機就是典型程序虛擬機,它專門為執行單個計算機程序而設計,在java虛擬機中執行的指令我們稱之為java位元組碼指令。java發展到今天,出現了很多虛擬機,最初sun使用的叫Classic的java虛擬機,到現在使用最廣泛的是HotSpot虛擬機,除了sun以外還有BEA的JRockit,目前JRockit和HotSpot都被甲骨文公司收入旗下,大有整合的趨勢。

Advertisements

java虛擬機的基本結構

1、類載入子系統:負責從文件系統或者網路中載入class信息,載入的信息放在一起稱之為方法去的內存空間。

2、方法區:就是存放類信息、常量信息、常量池信息、字元串字面量和數字常量等。

3、java堆:在java虛擬機啟動的時候建立java堆,它是java程序最主要的內存工作區域,幾乎所有的對象實例都存放在java堆中,堆空間是所有線程共享的。

4、直接內存:java的NIO庫允許java程序使用直接內存,從而提高性能,通常直接內存速度會優於java堆。讀寫頻繁的場合可能會考慮使用。

5、java棧:每個虛擬機線程都有一個私有的棧,一個線程的java棧在線程創建的時候被創建,java棧中保存著局部變數、方法參數、還有java的調用方法和返回值等。

Advertisements

6、本地方法棧:與java棧很類似,最大不同是本地方法棧用於本地方法調用。java虛擬機允許java直接調用本地方法(通常本地方法為C語言編寫)

7、垃圾回收系統:是java的核心,也是必不可少的,java有一套自己進行垃圾清理的機制,開發者無需手動清理。

8、PC寄存器:是每個線程私有的空間,java虛擬機會為每個線程創建PC寄存器,在任意時刻,一個java線程總是在執行一個方法,這個方法被稱為當前方法,如果當前方法不是本地方法,PC寄存器就會執行當前正在被執行的指令,如果是本地方法,則PC寄存器的值為undefined。寄存器存放如當前執行環境指針、程序計數器、操作棧指針、計算的變數指針等信息。

9、執行引擎:虛擬機最核心的就是執行引擎了,它負責執行虛擬機的位元組碼。一般用戶先編譯成機器碼后執行。

Advertisements

你可能會喜歡