java虛擬機視頻
① 什麼是java虛擬機
A:什麼是JVM
JVM是java虛擬機(JVM Java Virtual Machine),java程序需要運行在虛擬機上,不同平台有自己的虛擬機,因此java語言可以跨平台.
B:什麼是JRE
包括Java虛擬機(JVM Java Virtual Machine)和Java程序所需的核心類庫等如果想要運行一個開發好的Java程序,計算機中只需要安裝JRE即可。
JRE:JVM+類庫。
C:什麼是JDK (Java Development Kit Java 開發工具包)
JDK是提供給Java開發人員使用的,其中包含了java的開發工具,也包括了JRE。所以安裝了JDK,就不用在單獨安裝JRE了。
其中的開發工具:編譯工具(javac.exe) 打包工具(jar.exe)等
JDK:JRE+JAVA的開發工具。
② java虛擬機的作用
定義:
Java虛擬機(Java Virtual Machine 簡稱JVM)是運行所有Java程序的抽象計算機,是Java語言的運行環境,它是Java 最具吸引力的特性之一。
作用:
使用Java虛擬機是實現Java語言與平台的無關性的關鍵。
③ java中虛擬機該怎麼用
第一,你如果安裝的是jdk1.6.0.02這個安裝包,那麼你看看你的安裝路徑下面應該有兩個文件夾,一個叫jdk1.6.0_22,一個叫jre6。
第二,java虛擬機在後面一個文件首橋並夾裡面,也就是在名稱為jre6的文件夾內。
第三,java虛擬機的應用:java虛擬機是用來編譯運行java位元組碼文件的,如果你已經有需要運行的java位元組碼文件,那麼只需要配置這個位元組碼文件的路徑就可以了。下面介紹配置路徑(classpath):
【1】,右鍵點擊我的電腦,點擊屬性,選擇高級,你在裡面可以看到「環境變數」的按鈕,點擊它。
【2】,在打開的界面可以看到兩個列表框,在下面的那個列表框「系統變數」下面,你找「消告變數」那一列看看有沒有classpath這個欄位,如果有就左鍵選中,點擊編輯,在打開的輸入框的最左邊輸入你的java位元組碼文件的全路徑,最後用分號(英文的分號)結束。如果沒有就新建個classpath,把你的java位元組碼文件的全路徑輸入進去,用分號結束就ok,算是路徑配置成功了。
【3】,最後就是運行你的java位元組碼文件了。
點擊開始,運行,輸入cmd跳轉到命令提示符界面。假如你的java位元組碼文件在E:\javatest下面,名字叫Test.class
那你先輸入「E:」然後回車,然後再輸入「cd javatest」回車,然後輸入「java Test」者跡回車,就可以看到你的java位元組碼文件的運行結果了。
我有一篇PPT啊 那裡有詳細的記載啊 謝謝 才內啊
④ 怎麼學習java語言
java Netty實戰課程java高性能分布式RPC教程課程 免費下載
鏈接:https://pan..com/s/1MpUM62h4nvHnUGMan-R6YA
Java是一門面向對象的編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特徵。Java語言作為靜態面向對象編程語言的代表,極好地實現了面向對象理論,允許程序員以優雅的思維方式進行復雜的編程
⑤ java的發展歷史
一、Java語言的發展歷史
Sun的Java語言開發小組成立於1991年,其目的是開拓消費類電子產品市場,例如:互動式電視,烤麵包箱等。Sun內部人員把這個項目稱為Green,那時World Wide Web還在圖紙上呢。該小組的領導人是James Gosling,41歲。於1984年加盟Sun Microsystem公司,以前在一家IBM研究機構工作。他是Sun NeWs窗口系統的總設計師,雖然當時NeWs在技術上非常成功,但在商業上卻完全失敗,沒有了Java那麼好的運氣。Gosling是一悔兄位非常傑出的程序員,GOSMACS也是Gosling寫的,它是第一個用C實現的EMACS的文本編輯器。
在研究開發過程中,Gosling 深刻體會到消費類電子產品和工作站產品的開發哲學之間差異:消費類電子產品要求高可靠、費用低、裂仿標准化、使用簡單,而工作站用戶要求強大的計算能力,而不在此乎價格以及操作的復雜性。消費類電子產品用戶並不關心CPU的型號,也不欣賞專用昂貴的RISC處理器,他們需要建立在一個標准基礎之上,一系列可選的方案,從8086-80586都可以上。
從C++開始 為了使整個系統與平台無關,Gosling首先從改寫C++編譯器著手。但是Gosling在改寫過程中感到僅C++是無法滿足需要的,於是在1991年6月份開始准備開發一個新的語言,那麼給它起一個什麼名字呢? Gosling回首向窗外望去,看見一棵老橡樹,於是建一個目錄叫Oak,這就是Java語言的前身。(後來發現Oak已是Sun公司的另一個語言的注冊商標,才改名為Java,即爪哇,太平洋上一個盛產咖啡的島嶼的名字)。
Gosling在開始寫Java時,並不局限於擴充語言機制本身,更注重於語言所運行軟硬體環境,他要建立一個系統,這個系統運行於一個巨大的、分布的、異質的網路環境中,完成各電子設備之間的通訊與協同工作。Gosling在設計中採用了虛機器碼(Virtual Machine Code)方式。即Java語言編譯後產生的是虛機器碼,虛機器碼運行在一個解釋器上,每一個操作系統均有一個解釋器,這樣一來,Java就成了平台無關語言。這和Gosling設計的Sun NeWs窗口系統有著相同的技術味道,在NeWs中用戶界面統一用Postscript描述,不同的顯示器有不同的Postscript解釋器,這樣便保證了用戶界面的良好的可移植性。
當Patrick Naughton加入該小組後,整個工作進展神速。Naughton也是Sun公司的技術骨幹,曾經是Open Windows的項目的負責人。經過17個月的奮戰,整個系統勝利完成。它是由一個操作系統,一種語言(Java),一個用戶界面,一個新的硬體平台,三塊專用晶元的構成。而通常情況下,這樣的項碧源襲目在Sun公司要75個人干三年。項目完成後,在Sun公司內部做一次展示和鑒定,觀眾的反應是: 在各方面都採用了嶄新的、非常大膽的技術。許多參觀者對Java留下了非常深刻的印象,特別得到Sun的二位領導人Scott McNealy和Bill Joy的關注,但Java的前途未卜。
初戰告敗
接著,Java項目的工作人員開始做應用規劃,著手成立一家公司,從事消費類電子產品的開發,這家公司就是FirstPerson Inc.。公司的第一個項目就是Time-Warner的投標項目,頂置盒式操作系統和請求式電視技術。雖然FirstPerson Inc.在技術毫不遜色於任何公司,但是由於經營策略上的失誤,敗給了SGI。FirstPerson一直到1994年初仍在堅持開發專用的頂置盒式操作系統,但實踐證明,這個市場尚未成熟。例如:好幾家互動式有線電視網的實驗都以失敗告終。
Naughton立即認識到研究方向應該轉移。在Naughton的努力下,研究開始向在線服務,CD-ROM和基於網路的台式機方向轉移。最後FirstPerson解散,一部分人去了Sun Interactive開發數字視頻數據伺服器,而另一部分開始把Java用於基於網路的台式機系統。
Java語言的轉折點
到了1994年,WWW已如火如荼的發展起來。Gosling意識到WWW需要一個中性的瀏覽器,它不依賴於任何硬體平台和軟體平台。它應是一種實時性較高,可靠安全,有交互功能的瀏覽器。於是Gosling決定用Java開發一個新的Web瀏覽器。
二、Java發展史
Java是一種可以撰寫跨平台應用軟體的面向對象的程序設計語言,是由Sun Microsystems公司於1995年5月推出的Java程序設計語言和Java平台(即JavaSE, JavaEE, JavaME)的總稱。
Java 技術具有卓越的通用性、高效性、平台移植性和安全性,廣泛應用於個人PC、數據中心、游戲控制台、科學超級計算機、行動電話和互聯網,同時擁有全球最大的開發者專業社群。在全球雲計算和移動互聯網的產業環境下,Java更具備了顯著優勢和廣闊前景。
三、Java語言的發展歷史
任職於太陽微系統的詹姆斯•高斯林等人於1990年代初開發Java語言的雛形,最初被命名為Oak,目標設置在家用電器等小型系統的程序語言,應用在電視機、電話、鬧鍾、烤麵包機等家用電器的控制和通信。
由於這些智能化家電的市場需求沒有預期的高,Sun公司放棄了該項計劃。隨著1990年代互聯網的發展,Sun公司看見Oak在互聯網上應用的前景,於是改造了Oak,於1995年5月以Java的名稱正式發布。
Java伴隨著互聯網的迅猛發展而發展,逐漸成為重要的網路編程語言。Java語言的發展歷史分為以下幾個階段:1991 年Sun公司的James Gosling等人開始開發名稱為 Oak 的語言。
希望用於控制嵌入在有線電視交換盒、PDA等的微處理器1994年將Oak語言更名為Java1998年JDK1.2時,更名為Java 2 Platform分為標准版J2SE,企業版J2EE,微型版J2MEJava 既安全、可移植,又可跨平台,而且人們發現它能夠解決Inter 上的大型應用問題Inter使Java成為網上最流行的編程語言Java對Inter的影響也意義深遠B/S的興起 & C/S的沒落。
四、JAVA的發展歷史是什麼情況
一、JDK前傳
在這個世界上,熟悉Java歷史的人非常多,如果要問一個人Java是從哪年誕生的,也許大多數人都會回答是1995年(這個非常好記,因為微軟的Windows95也是在這一年發布的)。但事實上Java早在上個世紀90年代初就開始醞釀了。
1991年4月,Sun公司的James Gosling領導的綠色計劃(Green Project)開始著力發展一種分布式系統結構,使其能夠在各種消費性電子產品上運行。而Green項目組的成員一開始使用C++語言來完成這個項目, 由於Green項目組的成員都具有C++背景,所以他們首先把目光鎖定了C++編譯器,Gosling首先改寫了C++編譯器,但很快他就感到C++的很 多不足,需要研發一種新的語言Java來替代它,一杯飄香的咖啡成為了它的標志。
在17 個月後,整個系統完成了,這個系統是更注重機頂盒式的操作系統,不過在當時市場不成熟的情況下,他們的項目沒有獲得成功,但Java語言卻得到了Sun總裁McNealy的賞識。
直至 1994年下半年,由於Inter的迅猛發展和環球信息網 WWW的快速增長,第一個全球信息網路瀏覽器Mosaic誕生了;此時,工業界對適合在網路異構環境下使用的語言有一種非常急迫的需求;Games Gosling決定改變綠色計劃的發展方向,他們對Oak進行了小規模的改造,就這樣,Java在1995年的3月23日誕生了!Java的誕生標志著互 聯網時代的開始,它能夠被應用在全球信息網路的平台上編寫互動性及強的Applet程序,而1995年的Applet無疑能給人們無窮的視覺和腦力震盪。 我們姑且將Java的這段歷史稱為Java前傳吧。
其實Java的誕生頗有那麼一股「有心栽花花不開,無心插柳柳成陰」的味道。就象當年Unix和它的前身MULTICS系統一樣。
二、JDK的幼年時期(1995~1998)
Sun繼Green項目後又經過了幾年的研究,終於在1995年5月23日在SunWorldྛ上正式發布Java和HotJava瀏覽器。在同 年,有很多公司先後獲得了Java許可證,如Netscape在1995年8月,Oracle在1995年10月分別獲得了Java許可證。Sun在 1995年發布第一個Java版本後,於1996年1月宣布成立新的業務部門──JavaSoft部,這個部分主要負責開發、銷售並支持基於Java技術 的產品,由AlanBaratz先生任總裁。
在1995年Sun雖然推出了Java,但這只是一種語言,而要想開發復雜的應用程 序,必須要有一個的強大的開發庫支持還行。因此,Sun在1996年1月23日發布了JDK1.0。這個版本包括了兩部分:運行環境(即JRE)和開發環 境(即JDK)。在運行環境中包括了核心API、集成API,用戶界面API,發布技術,Java虛擬機(JVM)五個部分。而開發環境還包括了編譯 Java程序的編譯器(即javac)。在JDK1.0時代,JDK除了AWT(一種用於開發圖形用戶界面的API)外,其它的庫並不完整。
Sun在推出JDK1.0後,緊跟著,Sun在1997年2月18日發布了JDK1.1。JDK1.1相對於JDK1.0最大的改進就是為JVM增加了 JIT(即時編譯)編譯器。JIT和傳統的編譯器不同,傳統的編譯器是編譯一條,運行完後再將其扔掉,而JIT會將經常用到的指令保存在內容中,在下次調 用時就不需要再編譯了。這樣JDK在效率上有了非常大的提升。
Sun在推出JDK1.1後,接著又推出了數個JDK1.x版本。自從Sun推出Java後,JDK的下載量不斷彪升,在1997年,JDK的下載量突破了220,000,而在1998年,JDK的下載量已經超過了2,000,000。
五、Java語言的發展歷史
Java語言的歷史
Sun的Java語言開發小組成立於1991年,其目的是開拓消費類電子產品市場,例如:互動式電視,烤麵包箱等。Sun內部人員把這個項目稱為Green,那時World Wide Web還在圖紙上呢。該小組的領導人是James Gosling,41歲。於1984年加盟Sun Microsystem公司,以前在一家IBM研究機構工作。他是Sun NeWs窗口系統的總設計師,雖然當時NeWs在技術上非常成功,但在商業上卻完全失敗,沒有了Java那麼好的運氣。Gosling是一位非常傑出的程序員,GOSMACS也是Gosling寫的,它是第一個用C實現的EMACS的文本編輯器。
在研究開發過程中,Gosling 深刻體會到消費類電子產品和工作站產品的開發哲學之間差異:消費類電子產品要求高可靠、費用低、標准化、使用簡單,而工作站用戶要求強大的計算能力,而不在此乎價格以及操作的復雜性。消費類電子產品用戶並不關心CPU的型號,也不欣賞專用昂貴的RISC處理器,他們需要建立在一個標准基礎之上,一系列可選的方案,從8086-80586都可以上。
從C++開始 為了使整個系統與平台無關,Gosling首先從改寫C++編譯器著手。但是Gosling在改寫過程中感到僅C++是無法滿足需要的,於是在1991年6月份開始准備開發一個新的語言,那麼給它起一個什麼名字呢? Gosling回首向窗外望去,看見一棵老橡樹,於是建一個目錄叫Oak,這就是Java語言的前身。(後來發現Oak已是Sun公司的另一個語言的注冊商標,才改名為Java,即爪哇,太平洋上一個盛產咖啡的島嶼的名字)。
Gosling在開始寫Java時,並不局限於擴充語言機制本身,更注重於語言所運行軟硬體環境,他要建立一個系統,這個系統運行於一個巨大的、分布的、異質的網路環境中,完成各電子設備之間的通訊與協同工作。Gosling在設計中採用了虛機器碼(Virtual Machine Code)方式。即Java語言編譯後產生的是虛機器碼,虛機器碼運行在一個解釋器上,每一個操作系統均有一個解釋器,這樣一來,Java就成了平台無關語言。這和Gosling設計的Sun NeWs窗口系統有著相同的技術味道,在NeWs中用戶界面統一用Postscript描述,不同的顯示器有不同的Postscript解釋器,這樣便保證了用戶界面的良好的可移植性。
當Patrick Naughton加入該小組後,整個工作進展神速。Naughton也是Sun公司的技術骨幹,曾經是Open Windows的項目的負責人。經過17個月的奮戰,整個系統勝利完成。它是由一個操作系統,一種語言(Java),一個用戶界面,一個新的硬體平台,三塊專用晶元的構成。而通常情況下,這樣的項目在Sun公司要75個人干三年。項目完成後,在Sun公司內部做一次展示和鑒定,觀眾的反應是: 在各方面都採用了嶄新的、非常大膽的技術。許多參觀者對Java留下了非常深刻的印象,特別得到Sun的二位領導人Scott McNealy和Bill Joy的關注,但Java的前途未卜。
初戰告敗
接著,Java項目的工作人員開始做應用規劃,著手成立一家公司,從事消費類電子產品的開發,這家公司就是FirstPerson Inc.。公司的第一個項目就是Time-Warner的投標項目,頂置盒式操作系統和請求式電視技術。雖然FirstPerson Inc.在技術毫不遜色於任何公司,但是由於經營策略上的失誤,敗給了SGI。FirstPerson一直到1994年初仍在堅持開發專用的頂置盒式操作系統,但實踐證明,這個市場尚未成熟。例如:好幾家互動式有線電視網的實驗都以失敗告終。
Naughton立即認識到研究方向應該轉移。在Naughton的努力下,研究開始向在線服務,CD-ROM和基於網路的台式機方向轉移。最後FirstPerson解散,一部分人去了Sun Interactive開發數字視頻數據伺服器,而另一部分開始把Java用於基於網路的台式機系統。
Java語言的轉折點
到了1994年,WWW已如火如荼的發展起來。Gosling意識到WWW需要一個中性的瀏覽器,它不依賴於任何硬體平台和軟體平台。它應是一種實時性較高,可靠安全,有交互功能的瀏覽器。於是Gosling決定用Java開發一個新的Web瀏覽器。
六、Java發展史
Java是一種可以撰寫跨平台應用軟體的面向對象的程序設計語言,是由Sun Microsystems公司於1995年5月推出的Java程序設計語言和Java平台(即JavaSE, JavaEE, JavaME)的總稱。
Java 技術具有卓越的通用性、高效性、平台移植性和安全性,廣泛應用於個人PC、數據中心、游戲控制台、科學超級計算機、行動電話和互聯網,同時擁有全球最大的開發者專業社群。在全球雲計算和移動互聯網的產業環境下,Java更具備了顯著優勢和廣闊前景。
七、java的發展趨勢
Java未來的應用前景,從歷史來看,Java技術自1995年問世以來,在我國的應用和開發也得到了迅速普及,總體來看,這些應用主要集中於企業應用開發。
據有關單位調查顯示,從開發領域的分布情況上看Web開發佔了一半以上,為57.9%,JavaME移動或嵌入式應用佔15%,C/S應用佔11.7%,系統編程佔15.4%。近30%的開發者用Java從事C/S應用或系統級應用的開發。
在桌面應用上,盡管Java在桌面GUI方面尚有不盡如人意之處,但仍然有很多開發者用來開發運行在多種操作系統平台上的桌面應用。具體應用在如下幾個領域:1.行業和企業信息化由於Sun、IBM、Oracle、BEA等國際廠商相繼推出各種基於Java技術的應用伺服器以及各種應用軟體,帶動了Java在金融、電信、製造等領域日益廣泛的應用。
如清華大學計算機系利用Java、XML和Web技術研製開發了多個軟體平台,東方科技的TongWeb、金碟的Apusic、中創的Inforweb等J2EE應用伺服器及和佳ERP和寶信ERP等ERP產品,已在許多企業得到應用。2.電子政務及辦公自動化東方科技、金碟、中創等開發的J2EE應用伺服器在電子政務及辦公自動化中也得到應用:如金碟的Apusic在民政部、廣東省市工商局應用;東軟電子政務架構EAP平台在社會保險、公檢法、稅務系統得到應用;中創的Inforweb等Infor系列中間件產品在國家海事局、山東省 *** 及中國建設銀行、民生銀行等金融系統應用;無錫永中科技基於Java平台開發的國產化集成辦公軟體「永中Office」也已在一些省市 *** 部門得到應用。
3.嵌入式設備及消費類電子產品無線手持設備、通信終端、醫療設備、信息家電(如數字電視、機頂盒、電冰箱)、汽車電子設備等是今年以來比較熱門的Java應用領域。在這方面的應用有中國聯通CDMA1X網路中基於Java技術的無線數據增值服務——UniJa。
4.輔助教學在輔助教學方面,東南大學與中興通訊公司開發了遠程教學系統,用於本地網上教學、課後學習和異地遠程教育,清華大學用Java進行了「計算機軟體基礎課」教學改革,分析研究Java教學軟體BlueJ的漢化方案,電子科技大學應用JavaRMI技術進行遠程教育,西安電力高等專科學校採用Java技術,開發了互動式電站模擬系統,實現電站鍋爐模擬、鍋爐膛火焰模擬,為實現網上模擬進行有益探索。就Java程序設計語言自身的發展前景來講,定會與互聯網的發展需求邦定,具體體現在以下幾個方面:1)所有面向對象的應用開發。
2)軟體工程中需求分析、系統設計、開發實現和維護。3)中小型多媒體系統設計與實現。
4)消息傳輸媒體。5)分布計算交易管理平台應用。
6)Inter的系統管理功能模塊的設計,包括Web頁面的動態設計、網站信息提供管理和交互操作設計等。7)Inter(企業內部網)上完全基於Java和Web技術的應用開發。
8)Web伺服器後端與各類資料庫連接管理器(隊列、緩沖池)。9)安全掃描系統(包括網路安全掃描、資料庫安全掃描、用戶安全掃描等)。
10)網路/應用管理系統。11)其他應用類型的程序。
Java語言的應用推動著網路應用朝著更加高效、便捷、實用的方向發展,並最終成為IT產業極力推動的一項技術。我國對於Java語言的應用多放在企業互聯網作用方面,更加重視網路應用過程中無可 *** Java/J2EE技術,並將該技術作為應用程序開發過程中的首選。
無論在移動設備、消費品,還是嵌入式設備中,Java語言均得到了廣泛的應用,甚至延伸到了IC領域。未來Java語言將在嵌入式及移動設備中得到進一步的拓展,在各種電子信息產品中都有Java的應用。
特別是移動設備領域,Java語言的應用效果將更加顯著,並將定位由系統的通信終端轉變為個人信息端。目前,Sun公司已將Java核心源代碼公開,這將為開發人員進一步開發應用Java語言提供有力的條件,並為推動Java的進一步發展,維護其技術兼容性奠定有力的基礎。
Java開源將會吸引更多程序人員的加入,並將進一步完善Java語言,並最終 *** 整個IT行業的發展。總之,Java語言作為一種發展迅速的語言程序,已經深刻揭示了程序編寫過程的精髓,並藉助其嚴謹的結構與間接的編寫過程,為Java語言的未來發展提供了重要保證。
如今,有關Java語言方面的研究正朝著伺服器端優勢應用系統方面延伸,相信未來Java語言必將具有更加廣泛的應用,也必將會給IT行業的發展起到更有力的促進作用。
⑥ JAVA虛擬機是什麼意思
Java虛擬機(Java Virtual Machine,簡稱JVM)是一種假想的計算機。從結構上看,它由抽象的指令集、寄存器組、類文件格式規定、堆棧、內存垃圾收集器和存儲區六個部件組成。指令集採用與平合無關的位元組碼形式,寄存器組中包含程序計數器、堆棧指針、運行環境指針和變數指針,類文件也與平台無關,堆棧用來傳遞參數和返回運行結果,垃圾收集器收集不再使用的內存片段,存儲區則用來存放位元組碼。JVM僅僅規定部件的功能和規格。雖然這些功能和規格是統一的,但是並沒有規定這此部件的具體實現技術,就是說,可以用任何一種技術來實現。
Java中引入了虛擬機的概念,即在機器和編譯程序之間加入了一層抽象的虛擬的機器。這台虛擬的機器在任何平台上都提供給編譯程序一個的共同的介面。編譯程序只需要面向虛擬機,生成虛擬機能夠理解的代碼,然後由解釋器來將虛擬機代碼轉換為特定系統的機器碼執行。在Java中,這種供虛擬機理解的代碼叫做位元組碼(ByteCode),它不面向任何特定的處理器,只面向虛擬機。
每一種平台的解釋器是不同的,但是實現的虛擬機是相同的。Java源程序經過編譯器編譯後變成位元組碼,位元組碼由虛擬機解釋執行,虛擬機將每一條要執行的位元組碼送給解釋器,解釋器將其翻譯成特定機器上的機器碼,然後在特定的機器上運行。
可以說,Java虛擬機是Java語言的基礎。它是Java技術的重要組成部分。Java虛擬機是一個抽象的計算機,和實際的計算機一樣,它具有一個指令集並使用不同的存儲區域。它負責執行指令,還要管理數據、內存和寄存器。Java解釋器負責將位元組代碼翻譯成特定機器的機器代碼。Java是一種簡單的語言。它用到的概念不多,而且多為程序員所熟悉。如果你是一名程序員,掌握Java對你來說是易如反掌的事。即使你沒有學過任何編程語言,學習Java也要比學習C++要容易的多。
⑦ 什麼是Java虛擬機
虛擬機是一種抽象化的計算機,通過在實際的計算機上模擬模擬各種計算機功能來實現的。
Java虛擬機有自己完善的硬體架構,如處理器、堆棧、寄存器等,還具有相應的指令系統。JVM屏蔽了與具體操作系統平台相關的信息,使得Java程序只需生成在Java虛擬機上運行的目標代碼(位元組碼),就可以在多種平台上不加修改地運行。
這種解釋應該算是正確的,但是只描述了虛擬機的外部行為和功能,並沒有針對內部原理做出說明。一般情況下我們不需要知道虛擬機的運行原理,只要專注寫java代碼就可以了,這也正是虛擬機之所以存在的原因--屏蔽底層操作系統平台的不同並且減少基於原生語言開發的復雜性,使java這門語言能夠跨各種平台(只要虛擬機廠商在特定平台上實現了虛擬機),並且簡單易用。這些都是虛擬機的外部特性,但是從這些信息來解釋虛擬機,未免太籠統了,無法讓我們知道內部原理。
從進程的角度解釋JVM
讓我們嘗試從操作系統的層面來理解虛擬機。我們知道,虛擬機是運行在操作系統之中的,那麼什麼東西才能在操作系統中運行呢?當然是進程,因為進程是操作系統中的執行單位。可以這樣理解,當它在運行的時候,它就是一個操作系統中的進程實例,當它沒有在運行時(作為可執行文件存放於文件系統中),可以把它叫做程序。
對命令行比較熟悉的同學,都知道其實一個命令對應一個可執行的二進制文件,當敲下這個命令並且回車後,就會創建一個進程,載入對應的可執行文件到進程的地址空間中,並且執行其中的指令。下面對比C語言和Java語言的HelloWorld程序來說明問題。
首先編寫C語言版的HelloWorld程序。
總結
寫到這里,基本上關於我對java虛擬機的理解就寫完了。這篇文章的主題雖然是深入理解Java虛擬機,但是你可能感覺一點也不「深入」,也只是泛泛而談。我也有這樣的感覺。限於自己水平有限,也只能這樣了,要是想深入理解java虛擬機,強烈建議讀一下三本書:
《深入Java虛擬機》
《深入理解Java虛擬機JVM高級特性與最佳實踐》
《Java虛擬機規范》
其實我也讀過這幾本書,但是它們對虛擬機的解釋也是基於一個外部模型,而沒有深入剖析虛擬機內部的實現原理。虛擬機是一個大而復雜的東西,實現虛擬機的人都是大牛級別的,如果不是參與過虛擬機的實現,應該很少有人能把它參透。本專欄後面的一些文章也參考了這三本書, 雖然講解Java語法的書不計其數, 但是深入講解虛擬機的書, 目前為止我就見過這三本,並且網上的資料也不是很多。
最後做一個總結:
1 虛擬機並不神秘,在操作系統的角度看來,它只是一個普通進程。
2 這個叫做虛擬機的進程比較特殊,它能夠載入我們編寫的class文件。如果把JVM比作一個人,那麼class文件就是我們吃的食物。
3 載入class文件的是一個叫做類載入器的子系統。就好比我們的嘴巴,把食物吃到肚子里。
4 虛擬機中的執行引擎用來執行class文件中的位元組碼指令。就好比我們的腸胃,對吃進去的食物進行消化。
5 虛擬機在執行過程中,要分配內存創建對象。當這些對象過時無用了,必須要自動清理這些無用的對象。清理對象回收內存的任務由垃圾收集器負責。就好比人吃進去的食物,在消化之後,必須把廢物排出體外,騰出空間可以在下次餓的時候吃飯並消化食物。
(7)java虛擬機視頻擴展閱讀:
關於JAVA虛擬機的參數說明如下:
1、運行class文件
執行帶main方法的class文件,Java虛擬機[3]命令參數行為:
java <CLASS文件名>
注意:CLASS文件名不要帶文件後綴.class
例如:
java Test
如果執行的class文件是帶包的,即在類文件中使用了:
package <;包名>
那應該在包的基路徑下執行,Java虛擬機命令行參數:
java <;包名>.CLASS文件名
例如:
PackageTest.java中,其包名為:com.ee2ee.test,對應的語句為:
package com.ee2ee.test;
PackageTest.java及編譯後的class文件PackageTest.class的存放目錄如下:
classes
|__com
|__ee2ee
|__test
|__PackageTest.java
|__PackageTest.class
要運行PackageTest.class,應在classes目錄下執行:
java com.ee2ee.test.PackageTest
2、運行jar文件中的class
原理和運行class文件一樣,只需加上參數-cp <jar文件名>;即可。
例如:執行test.jar中的類com.ee2ee.test.PackageTest,命令行如下:
java -cp test.jar com.ee2ee.test.PackageTest
3、顯示JDK版本信息
當一台機器上有多個jdk版本時,需要知道當前使用的是那個版本的jdk,使用參數-version即可知道其版本,命令行為:
java -version
4、增加虛擬機可以使用的最大內存
Java虛擬機可使用的最大內存是有限制的,預設值通常為64MB或128MB。
如果一個應用程序為了提高性能而把數據載入內存中而佔用較大的內存,比如超過了默認的最大值128MB,需要加大java虛擬機可使用的最大內存,否則會出現Out of Memory的異常。啟動java時,需要使用如下兩個參數:
-Xms java虛擬機初始化時使用的內存大小
-Xmx java虛擬機可以使用的最大內存
以上兩個命令行參數中設置的size,可以帶單位,例如:256m表示256MB
舉例說明:
java -Xms128m -Xmx256m ...
表示Java虛擬機初始化時使用的內存為128MB,可使用的最大內存為256MB。
對於tomcat,可以修改其腳本catalina. sh(Unix平台)或catalina.bat(Windows平台),設置變數JAVA_OPTS即可,例如:
JAVA_OPTS='-Xms128m -Xmx256m'