JVM是Java Virtual Machine(Java虛擬機)的縮寫,JVM是一種用于計算設備的規范,它是一個虛構出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現的。
JVM 是 Java Virtual Machine(Java 虛擬機)的縮寫,JVM 是一種用于計算設備的規范,它是一個虛構出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現的。
引入 Java 語言虛擬機后,Java 語言在不同平臺上運行時不需要重新編譯。Java 語言使用 Java 虛擬機屏蔽了與具體平臺相關的信息,使得 Java 語言編譯程序只需生成在 Java 虛擬機上運行的目標代碼(字節碼),就可以在多種平臺上不加修改地運行。
Java 虛擬機有自己完善的硬件架構,如處理器、堆棧等,還具有相應的指令系統。
Java 虛擬機本質上就是一個程序,當它在命令行上啟動的時候,就開始執行保存在某字節碼文件中的指令。Java 語言的可移植性正是建立在 Java 虛擬機的基礎上。任何平臺只要裝有針對于該平臺的 Java 虛擬機,字節碼文件(.class)就可以在該平臺上運行。這就是“一次編譯,多次運行”。
Java 虛擬機不僅是一種跨平臺的軟件,而且是一種新的網絡計算平臺。該平臺包括許多相關的技術,如符合開放接口標準的各種 API、優化技術等。Java 技術使同一種應用可以運行在不同的平臺上。Java 平臺可分為兩部分,即 Java 虛擬機(Java virtual machine,JVM)和 Java API 類庫。
每個 Java 程序都離不開 Java 虛擬機,Java 程序的運行依靠具體的 Java 虛擬機實例。在 Java 虛擬機規范中,分
別用子系統、內存區、數據類型以及指令這幾個術語來描述的。這些組成部分一起展示出一個抽象化的虛擬機內部的抽象體系結構。
Java 虛擬機主要分為五大模塊:類裝載器子系統、運行時數據區、執行引擎、本地方法接口和垃圾收集模塊。其中垃圾收集模塊在 Java 虛擬機規范中并沒有要求 Java 虛擬機垃圾收集,但是在沒有發明無限的內存之前,大多數 JVM 實現都是有垃圾收集的。而運行時數據區都會以某種形式存在于每一個 JAVA 虛擬機實例中,但是 Java 虛擬機規范對它的描述卻是相當抽象。這些運行時數據結構上的細節,大多數都由具體實現的設計者決定。
Java 虛擬機不是真實的物理機,它沒有寄存器,所以指令集是使用 Java 棧來存儲中間數據,這樣做的目的就是為了保持 Java 虛擬機的指令集盡量的緊湊,同時也便于 JAVA 虛擬機在那些只有很少通用寄存器的平臺上實現。另外,JAVA 虛擬機的這種基于棧的體系結構,有助于運行時某些虛擬機實現的動態編譯器和即時編譯器的代碼優化。
Java 語言的一個非常重要的特點就是與平臺的無關性。而使用 Java 虛擬機是實現這一特點的關鍵。一般的高級語言如果要在不同的平臺上運行,至少需要編譯成不同的目標代碼。而引入 Java 語言虛擬機后,Java 語言在不同平臺上運行時不需要重新編譯。Java 語言使用模式 Java 虛擬機屏蔽了與具體平臺相關的信息,使得 Java 語言編譯程序只需生成在 Java 虛擬機上運行的目標代碼(字節碼),就可以在多種平臺上不加修改地運行。Java 虛擬機在執行字節碼時,把字節碼解釋成具體平臺上的機器指令執行。
(1)對于 Java 運行時涉及到的存儲區域主要包括程序計數器、Java 虛擬機棧、本地方法棧、java 堆、方法區以及直接內存等等。對于每個部分,都有其使用的條件。程序計數器主要是取下一條指令,在 Java 里面主要是取下一條指令的字節碼文件;Java 虛擬機棧主要是利用棧先進后出的特性存儲局部變量表,動態鏈接等,主要包括堆內存和棧內存,對于程序員內存分析而言是特別重要的。本地方法棧與上邊的?;咀饔貌畈欢?,只不過這里是為 Java 方法而服務。Java 堆是內存管理中最大的一塊,所有的線程共享這一塊內容,同時該部分也是垃圾收集器的主要區域。
(2)虛擬機的垃圾回收機制是完善的,動態內存分配和回收是比較成熟的,在內存管理機制中,大部分都不需要我們考慮內存回收,只有 Java 堆和方法區需要我們考慮處理內存問題。一般的對于內存回收首先就是判斷某一個部分是生存還是死亡,主要是通過下面二種算法:
其一是引用計數算法,本算法實現簡單,判定的效率也是比較高的,很多的軟件都使用了該算法,但是主流的 Java 并沒有選擇該算法,核心的問題是該算法難以處理對象之間相互調用的問題。
其二是稱可達性分析算法,該算法核心思想是依靠判斷對象是否存活來實現的,本算法是通過一系列的 GC ROOTS 的對象作為起始點,采用搜索的算法遍歷引用鏈,如果搜索過程中沒有發現該節點,則認為該節點是不可達的,即可回收的,在 Java 里面,一般可以使用該算法處理問題。
1、移植性
無論是 GC 還是 Hotspot 都可以用在任何 Java 可用的地方。比方說,JRuby 可以運行在其他平臺上,Rails 應用就可以運行在 IBM 主機上的 JRuby 上,而且這臺 IBM 主機運行的是 CP/CMS.實際上,由于 Java 和 OpenJDK 項目的開源,我們正在看到越來越多的平臺的衍生,因此 JVM 的移植性也將越來越棒。
2、成熟
JVM 已有多年的歷史,在過去的這些年里,許多開發者為它做出了許多貢獻,使得它的性能一次又一次地提升,讓 JVM 變得更加穩定、快速和廣泛。
3、覆蓋面
JRuby 和 JVM 上的其他語言項目已經被承認,一個例子是 invokedynamic specification(akaJSR292)。JSR 越來越配合新的語言,JVM 已不再是 Java 一個人定制規則。JVM 正在構建成為類如 JRuby 等項目的優良平臺。還有一個 MLVM(multiple languageVM)項目,好比是新特性的清算機構,是一個許多企業應用的開發者試圖添加應用的地方,而這些應用正是他們想在 JVM 中看到的。而且 JVM 開發者互相協作、彼此影響,無疑這有利于 JVM 新特性的誕生。這些細節都可以看到 JVM 正在關注開發者的需求,擴大他的覆蓋面。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
阿米尼的山地車怎么樣想買一個有了解的嗎謝謝_?一般般吧,低端的平時通勤騎還行,最起碼質量還是不錯的,不過強度大了會很吃不消 好一點兒的勉強能當入門山地騎,雖然質量一般,但是比較有型,看著視覺效果還不錯 再好一點兒的其實就是組裝車,只是阿米尼廠家自己進零件組裝好后貼了自己的牌子;這種車子和自己去組裝區別不大了,并且還沒有自己去裝車子隨性,不推薦買這種車子。。??傮w來說如果錢不是很充足的話,想弄個入門...
十大耐用消費品 什么是大型耐用消費品?耐用消費品都指什么? 簡單來說,大型耐用消費品是指使用壽命長,不是一次性用品。常見的有數碼電器、家具、奢侈品包等。價格高的是大型耐用消費品。根據中國工商銀行的規定,是指單價在3000元以下(含3000元)、正常使用壽命在2年以上的家用商品,包括家用電器、電腦、家具、健身器材、衛生潔具、樂器等。換句話說,單價低于3000元或正常使用壽命低于2年的家庭耐用商品...
寫表單的時候有個value屬性,是表示什么呢?Value是表單控件傳遞給處理程序的值。例如,這是一個文本框。其值為“請在此處填寫用戶名”,即文本框。原文是“請在這里填寫用戶名”男女這是兩個單選按鈕。如果在表單提交后選擇“男”,則提交的值就是值,即表單提交后選擇“男”,反之亦然...